题目描述:
牛牛有一个数组长度大小为n ,数组中有图片说明 个正整数。现在牛牛请你从其中选出三个元素(注意选择元素的下标不能相同,但是其值可以相同)组成一个三角形。

无法做到,请输出一行一个字符串"No solution",反之请输出这三个元素的值。

如果有多种组成三角形的元素组合,你可以输出任意一种

输入描述:
第一行是一个正整数图片说明 ,(图片说明 )表示数组的元素个数。

接下来一行输入图片说明 个正整数图片说明 (图片说明 )表示每个数组元素的值。

输出描述:
如无法做到,请输出一行一个字符串"No solution",反之请输出这三个元素的值。

如果有多种组成三角形的元素组合,你可以输出任意一种。

示例1
输入
5
2 2 3 2 2
输出
2 2 3
说明
使用2 2 3,可以组成一个三角形

示例2
输入
3
1 2 1
输出
No solution
说明
1 2 1不能组成一个三角形,无解。

/*
本文系「人工智能安全」(微信公众号)原创,转载请联系本文作者(同博客作者)。
欢迎你转发分享至朋友圈,并给予「关注、星标、点赞」三连支持。互相欣赏,互相批判。
我是一名有诗人气质的网络安全工程师
期待与你的思想交流碰撞出智慧的花火
作者:水木清华
2020-05-08
牛牛的三角形
*/
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int TriangleJudge(int n) {
    vector<int> nums;
    int number;
    for (int i = 0; i < n; i++) {
        cin >> number;
        nums.push_back(number);
    }
    int count = 0;
    sort(nums.begin(), nums.end());
    for (int i = n - 1; i >= 2; i--) {
        int left = 0, right = i - 1;
        while(left < right) {
            if (nums[left] + nums[right] > nums[i]) {
                count += (right - left);
                cout << nums[left] << ' ' << nums[right] << ' ' << nums[i] << endl;
                break;
            }
            else {
                left++;
            }
        }
        break;
    }
    if (count == 0) {
        cout << "No solution" << endl;
    }
    return 0;
}
//主函数
int main () {
    int n;
    while (cin >> n) {
        TriangleJudge (n);
    }
    return 0;
}