题意:
给出5个值,求按顺序+-*是否能得到23
思路:
全排列之前必须排序,不然会wa
代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int flag;
int arr[5];
void dfs(int sum, int i) {
if(sum == 23 && i==5) {
flag = 1;
return;
}
if(i>=5) return;
dfs(sum+arr[i], i+1);
dfs(sum-arr[i], i+1);
dfs(sum*arr[i], i+1);
}
int main() {
while(scanf("%d", &arr[0]) == 1) {
int temp = 0;
for(int i=1; i<5; i++) {
scanf("%d", &arr[i]);
if(arr[i]==0) temp = 1;
}
if(temp) break;
flag = 0;
sort(arr, arr+5);
dfs(arr[0], 1);
while(next_permutation(arr, arr+5) && !flag) {
dfs(arr[0], 1);
}
if(flag) printf("Possible\n");
else printf("Impossible\n");
}
return 0;
}
123

被折叠的 条评论
为什么被折叠?



