三个数相加等于0
题目描述
输入一个数组,他有n个元素,如果其中有三个数和为零,那么输出Yes,否则输出No
输入格式
第一行一个整数n表示数组元素个数
第二行a数组
输出格式
Yes或No
输入样例
4
-2 1 1 2
输出样例
Yes
参考代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,temp=0;
cin>>n;
int a[n];
for(int i=0;i<n;i++)//输入数据
{
cin>>a[i];
}
sort(a,a+n);//排序
for(int i=0;i<n;++i)
{
int c=-a[i];
if(c<0)//如果是正数,跳出
{
break;
}
int j=i+1,k=n-1;//从头和尾开始查找
while(j<k)
{
if(a[j]+a[k]==c)//如果找到
{
temp=1;
break;
}
else if(a[j]+a[k]<c)//如果小于,向右移动一位开始查找
{
j++;
}
else//如果打于,向左移动一位开始查找
{
k--;
}
}
if(temp==1)//如果可以找到
{
break;
}
while(i+1<n&&a[i]==a[i+1])
{
i++;
}
}
if(temp==1)
{
cout<<"Yes";
}
else
{
cout<<"No";
}
}