问题 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分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论