【51 nod 1090】 3个数和为0

来源:互联网 发布:刺客列传网络剧 编辑:程序博客网 时间:2024/06/16 17:09
给出一个长度为N的无序数组,数组中的元素为整数,有正有负包括0,并互不相等。从中找出所有和 = 0的3个数的组合。如果没有这样的组合,输出No Solution。如果有多个,按照3个数中最小的数从小到大排序,如果最小的数相等则按照第二小的数排序。
Input
第1行,1个数N,N为数组的长度(0 <= N <= 1000)
第2 - N + 1行:Aii(-10^9 <= Aii <= 10^9)
Output
如果没有符合条件的组合,输出No Solution。
如果有多个,按照3个数中最小的数从小到大排序,如果最小的数相等则继续按照第二小的数排序。每行3个数,中间用空格分隔,并且这3个数按照从小到大的顺序排列。
Sample Input
7-3-2-10123
Sample Output
-3 0 3-3 1 2-2 -1 3-2 0 2-1 0 1
#include<cstdio>#include<algorithm>#include<cstring> #include<map>using namespace std;int a[1005]; map<int,bool>p;  //使用map来容纳数据,数组开不了这么大 bool boo=0;bool cmp(int x,int y){return x<y;}int main(){int n;scanf("%d",&n);for(int i=0; i<n; i++){scanf("%d",&a[i]);p[a[i]]=1;}sort(a,a+n,cmp);for(int i=0; i<n-2; i++)for(int j=i+1; j<n-1; j++){int x=0-(a[i]+a[j]);if(x>a[j]&&p[x]){printf("%d %d %d\n",a[i],a[j],x);boo=1;} } if(!boo)printf("No Solution\n"); } 

原创粉丝点击