您的位置:首页 > 其它

uva 10125 Sumsets(搜索)

2013-08-15 22:35 417 查看


Sumsets

Given S, a set of integers, find the largest d such that a + b + c = d where a, b, c, and d are distinct elements of S.


Input

Several S, each consisting of a line containing an integer 1 <= n <= 1000 indicating the number of elements in S, followed by the elements of
S, one per line. Each element of S is a distinct integer between -536870912 and +536870911 inclusive. The last line of input contains 0.


Output

For each S, a single line containing d, or a single line containing "no solution".


Sample Input

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



Output for Sample Input

12
no solution

题目大意:给出n个数,找出n个数中满足a + b + c = d,的组合,输出d,不存在输出”no soluution",(注意d要求最大)

解题思路:首先将n个数排序,从最大的数开始遍历,,而a也从最大的开始遍历,然后求的d - a的值,将b 和 c分别从最大和最小的地方遍历,知道b < c 为止,如果b  + c > d - a ,b应该向小一点的数值移动,反之,c向大一点的数值移动。等于的时候即是满足的情况。

#include <stdio.h>
#include <algorithm>
using namespace std;
const int N = 1005;
int answer, a, b, c, d, n;
int num
;

bool find() {
for (a = n - 1; a >= 0; a--) {
for (b = n - 1; b > 0; b--) {
if (a == b)	continue;
answer = num[a] - num[b];
for (c = 0, d = b - 1; c < d; ) {
if (num[c] + num[d] == answer)
return true;
else if (num[c] + num[d] < answer)
c++;
else
d--;
}
}
}
return false;
}

int main() {
while (scanf("%d",&n) == 1 && n) {
for (int i = 0; i < n; i++)
scanf("%d", &num[i]);
sort(num, num + n);
if (find())
printf("%d\n", num[a]);
else
printf("no solution\n");
}
return 0;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: