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