编程语言
首页 > 编程语言> > C++算法代码——Sumsets[uva10125]

C++算法代码——Sumsets[uva10125]

作者:互联网

题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1278

题目描述

给你一个整数的集合S(里面所有的整数均不相同),请你找出最大的 d,使得 a + b + c = d。在这里a,b,c,d均为S中的数且a,b,c,d是不同的数。

输入

每组测试资料的第一行有1个整数 n(1 <= n <= 1000),代表S中元素的个数。接下来的n行,每行有一个整数xi,代表S中的各元素。-536870912 <= xi <= +536870911.n=0时代表输入结束,请参考Sample Input。

输出

对每一组测试资料,输出d。如果找不到则输出no solution。

样例输入

5
2 
3 
5 
7 
12
5
2 
16 
64 
256 
1024
0

样例输出

12
no solution

作者分析:这道题我们可以先排序,算出最大的和,然后暴力求解。
#include <bits/stdc++.h>
using namespace std;

int main(){
    int ans[100001],t = 0;
    while (true){
        int n;
        cin >> n;
        if (n == 0){
            break;
        }
        t++;
        int a[n+1];
        for (int i = 1;i <= n;i++){
            cin >> a[i];
        }
        sort(a,a+n+1);
        int max = -1;
        for (int i = n;i >= 1;i--){
            for (int j = 1;j <= i;j++){
                for (int k = j+1;k <= i;k++){
                    for (int l = k + 1;l <= i;l++){
                        if (a[j] + a[k] + a[l] == a[i]){
                            ans[t] = a[i];
                            max = 0;
                            break;
                        }
                    }
                    if (max == 0){
                        break;
                    }
                }
                if (max == 0){
                    break;
                }
            }
            if (max == 0){
                break;
            }
        }
        if (max == -1){
            ans[t] = -1;
        }
    }
    for (int i = 1;i <= t;i++){
        if (ans[i] == -1){
            cout << "no solution" << endl;
            continue;
        }
        cout << ans[i] << endl;
    }
}

 

 

标签:输出,12,no,int,样例,uva10125,C++,solution,Sumsets
来源: https://www.cnblogs.com/linyiweiblog/p/14411451.html