(个人水平有限,请见谅!)
描述:
给出一个整数数组, 数组中是否存在任意 3 个数 a, b, c 满足 a + b + c = 0? 找出数组中所有满足以上条件的三元组,最后输出这些三元组的个数(包含相同元素的三元组只计算一次)。
输入:
一个包含多个整数(正或负)的字符串,每个整数之间用逗号(,)分隔,如:-1,0,1,2,-1,-4。
输出:
输入满足加和结果正好等于 0 的三元组的个数,如对于 -1,0,1,2,-1,-4 有 [-1, 0, 1] 和 [-1, -1, 2],所以输出 2。
输入样例:
-1,0,1,2,-1,-4
输出样例:
2
代码示例:
#include <iostream>
#include <bits/stdc++.h>
#include <vector>
#include <string>
using namespace std;
int main()
{
char line[1000001];
// 循环读入多行数据
while (cin.getline(line, 1000000)) {
int temp = 0, num = 0;
int flag_i = -INT_MAX, flag_j = -INT_MAX;
vector<int> vec, put;
char *p = strtok(line, ",");
while (p)
{
sscanf(p, "%d", &temp);
vec.push_back(temp);
p = strtok(NULL, ",");
}
sort(vec.begin(), vec.end());
for (int i = 0; i < vec.size()-1; i++)
{
if (vec[i] == flag_i)
{
continue;
}
flag_i = vec[i];
for (int j = i + 1; j < vec.size(); j++)
{
if (vec[j] == flag_j)
{
continue;
}
flag_j = vec[j];
for (int k = vec.size()-1; k > j; k--)
{
if (vec[i]+vec[j]+vec[k] == 0)
{
num++;
break;
}
if (vec[i]+vec[j]+vec[k] < 0)
break;
}
}
}
cout << num << endl;
}
return 0;
}