版权声明:转载请注明出处。 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;
}