三个数相加等于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";
	}
}
发布了54 篇原创文章 · 获赞 7 · 访问量 8214

猜你喜欢

转载自blog.csdn.net/TigerJoez/article/details/93127872