2012年10月11日

UVa 10344 - 23 out of 5


#include <cstdio>
#include <algorithm>

int num[12], flag;

void run(int sum, int times) {
  if (flag) return;
  if (times == 5) {
    if (sum == 23) flag = 1;
    return;
  }
  run(sum + num[times], times + 1);
  run(sum - num[times], times + 1);
  run(sum * num[times], times + 1);
}

int main() {
  while (scanf("%d%d%d%d%d", &num[0], &num[1], &num[2], &num[3], &num[4])) {
    if (!num[0] && !num[1] && !num[2] && !num[3] && !num[4]) break;
    flag = 0;
    std::sort(num, num + 5);
    do {
      run(num[0], 1);
    } while (!flag && std::next_permutation(num, num + 5));
    if (flag) puts("Possible");
    else puts("Impossible");
  }
  return 0;
}

沒有留言:

張貼留言