简单题,只要四重循环就能完成,虽然很慢。没有考虑到wager还可以是负数,所以循环做了限制,后来去掉了。find()函数不会用,就自己写了一个简单的。
//1101Gamblers
#include <iostream>
#include <stdio.h>
#include <algorithm>
#define FILE_DEBUG
//#define DEBUG
#ifdef FILE_DEBUG
#include <fstream>
#endif
using namespace std;
long wag[1000];
int main(int argc, char *argv[])
{
#ifdef FILE_DEBUG
ifstream fin;
fin.open("input.txt");
cin.rdbuf(fin.rdbuf()); // assign file's streambuf to cin
#ifdef _C_LAN_
freopen("input.txt", "r", stdin);
#endif
#endif
#ifdef FILE_DEBUG
ofstream fout;
fout.open("output.txt");
cout.rdbuf(fout.rdbuf()); // assign file's streambuf to cout
#ifdef _C_LAN_
freopen("output.txt", "w", stdout);
#endif
#endif
int gam_sum;
long minus, found;
bool is_found;
while (cin >> gam_sum && gam_sum > 0)
{
if (gam_sum < 4)
{
cout << "no solution" << endl;
continue;
}
for (int i = 0; i < gam_sum; i ++)
{
cin >> wag[i];
}
sort(wag, wag + gam_sum);
#ifdef DEBUG
for (int i = 0; i < gam_sum; i ++)
{
cout << wag[i] << endl;
}
cout << endl;
#endif
is_found = false;
for (int i = gam_sum - 1; i >= 0; i --)
{
for (int j = gam_sum - 1; j >= 0; j --)
{
if (j == i)
continue;
for (int k = gam_sum - 1; k >= 0; k --)
{
if (k == i || k == j)
continue;
minus = wag[i] - wag[j] - wag[k];
//found = find(, wag, wag + i, minus);
for (int m = 0; m < gam_sum; m ++)
{
if (wag[m] == minus && m != i && m != j && m != k)
{
is_found = true;
cout << wag[i];
break;
}
}
if (is_found == true)
break;
}
if (is_found == true)
break;
}
if (is_found == true)
break;
}
if (is_found == false)
cout << "no solution";
cout << endl;
}
return 0;
}