问题 A: 3sum
时间限制: 1Sec 内存限制: 128MB 提交: 53 解决: 3
题目描述
给定n个整数,在这n个数中找出所有存在a、b、c元素使得a + b + c = 0?在数组中找到所有唯一的三元组,它们的和为零。
输入
给你一组有重复数字(每一个数据不超过|1000|)的数据,以空格隔开
输出
输出有多少组唯一的三元组(重复的三元组算一组)
样例输入
-1 0 1 2 -1 -4
样例输出
2
代码如下:
#include "iostream" using namespace std; int main() { int arrary[100],size=0; int book[1000][3],num=0;//标记数组 for(int i=0;i<100;i++) arrary[i]=INT_MAX; while(cin >> arrary[size]) { size++; } for(int i=0+0;i<size-2;i++)//不计重复只要满足条件直接标记 { for(int j=i+1;j<size-1;j++) for(int k=j+1;k<size-0;k++) { if(arrary[i]+arrary[j]+arrary[k]==0) { book[num][0]=arrary[i];book[num][1]=arrary[j];book[num][2]=arrary[k]; num++; //cout<< arrary[i] <<"+"<< arrary[j]<<"+"<< arrary[k] <<"=0\n"<<i << " "<<j<<" "<<k<<"\n";测试时用的 } } } for(int i=0;i<num-1;i++)//去重 { for(int j=i+1;j<num;j++){ if(book[i][0]==book[j][0]&&book[i][1]==book[j][1]&&book[i][2]==book[j][2]) num--; else if(book[i][0]==book[j][0]&&book[i][1]==book[j][2]&&book[i][2]==book[j][1]) num--; else if(book[i][0]==book[j][1]&&book[i][1]==book[j][0]&&book[i][2]==book[j][2]) num--; else if(book[i][0]==book[j][1]&&book[i][1]==book[j][2]&&book[i][2]==book[j][0]) num--; else if(book[i][0]==book[j][2]&&book[i][1]==book[j][1]&&book[i][2]==book[j][0]) num--; else if(book[i][0]==book[j][2]&&book[i][1]==book[j][0]&&book[i][2]==book[j][1]) num--; } } cout << num; }
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题6.7 (C语言代码)浏览:778 |
钟神赛车 (C++代码)浏览:905 |
母牛的故事 (C语言代码)浏览:478 |
c primer plus 第十二章 12.1小节浏览:400 |
多输入输出练习1 (C语言代码)浏览:1219 |
校门外的树 (C语言代码)浏览:988 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:1015 |
WU-整数平均值 (C++代码)浏览:1307 |
P1000 (C语言代码)浏览:911 |
大家好,我是验题君浏览:604 |