版权声明:转载请注明出处。 https://blog.csdn.net/u014427196/article/details/48898885
题目链接: [
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1090 ](http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1090)
水题。
枚举前两项 二分第三项。
代码:
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <algorithm>
#include <math.h>
#include <stack>
#include <queue>
using namespace std;
int n;
int a[10010];
int main()
{
while (scanf("%d", &n) != EOF)
{
for (int i = 1;i <= n;i++)
scanf("%d", &a[i]);
sort(a + 1, a + 1 + n);
int ok = 0;
for (int i = 1;i <= n;i++)
for (int j = i + 1;j <= n;j++)
{
if (i != j)
{
int sum = a[i] + a[j];
int left = 1, right = n;
int mid;
int k = 0;
int pos;
while (left <= right)
{
mid = (left + right) / 2;
if (a[mid] == -sum && mid != i && mid != j)
{
k = 1;
pos = mid;
}
if (a[mid] + sum > 0) right = mid - 1;
else left = mid + 1;
}
if (k && pos > j)
{
printf("%d %d %d\n", a[i], a[j], a[pos]);
ok = 1;
}
}
}
if (!ok) puts("No Solution");
}
return 0;
}
留言