题目的意思是给出5个数字。然后用 + - × 随意组合,能不能得出23.
先是用全排列,然后每种排列都用 dfs算一次看看能不能得到23.
AC代码:
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 6;
int num[N];
bool ok;
void dfs(int pos ,int res) {
if(pos == 5 && res == 23) {
ok = true;
return ;
}
if(pos == 5)
return ;
dfs(pos + 1 ,res + num[pos]);
dfs(pos + 1 , res - num[pos]);
dfs(pos + 1 , res * num[pos]);
return ;
}
bool cul() {
do {
ok = false;
dfs(1,num[0]);
if (ok)
return true;
}while(next_permutation(num , num + 5));
return false;
}
int main () {
while(1) {
for (int i = 0 ; i < 5 ; i++) {
cin >> num[i];
}
if(num[0] == 0 && num[1] == 0 && num[2] == 0 && num[3] == 0 && num[4] == 0)
break;
sort(num ,num + 5);
if(cul())
cout << "Possible"<<endl;
else
cout << "Impossible" << endl;
}
}