题目大意:给出 n 个数,找出 n 个数中满足 a + b + c = d,的组合,输出 d,不存在输出”no soluution",(注意 d 要求最大)
解题思路:首先将 n 个数排序,d 从最大的数开始遍历,而 a 也从最大的数开始遍历,b 从刚好比 a 小一点的数开始遍历,c 从最小的数遍历,直到 b < c 为止,如果a + b + c > d , b 应该向小一点的数值移动,反之,c 向大一点的数值移动。等于的时候即是满足的情况。
#include <cstdio>
#include <algorithm>
using namespace std;
int a, b, c, d, n, arr[1005];bool judge() {for (d = n - 1; d >= 0; d--)for (a = n - 1; a > 0; a--)for (b = a - 1, c = 0; b > c && a != d; )if (arr[a] + arr[b]+ arr[c] == arr[d])return true;else arr[a] + arr[b] + arr[c] < arr[d] ? c++ : b--;return false;
}int main() {while (scanf("%d", &n), n) {for (int i = 0; i < n; i++)scanf("%d", &arr[i]);sort(arr, arr + n);judge() ? printf("%d\n",arr[d]) : printf("no solution\n");}return 0;
}