Problem I
23 Out of 5
Input: standard input
Output: standardoutput
Time Limit: 1 second
Memory Limit: 32 MB
Your task is to writea program that can decide whether you can find an arithmetic expression consistingof five given numbers (1<=i<=5) that will yieldthe value 23.
For this problem we will only consider arithmetic expressions of the followingfrom:
where : {1,2,3,4,5} -> {1,2,3,4,5} is a bijective function
and {+,-,*} (1<=i<=4)
Input
The Input consists of 5-Tupelsof positive Integers, each between 1 and 50.
Input is terminated by a line containing five zero's. This line should not beprocessed.
Output
For each 5-Tupel print"Possible" (without quotes) if their exists an arithmetic expression(as described above) that yields 23. Otherwise print "Impossible".
Sample Input
1 1 1 1 1
1 2 3 4 5
2 3 5 7 11
0 0 0 0 0
Sample Output
Impossible
Possible
Possible 题意: 输入五个数, 任意顺序, 之间用 + - * , 使得数等于23~ DFS吧! AC代码:#include<stdio.h> #include<algorithm> using namespace std; int num[10]; int mark; int succeed; void DFS(int i, int sum) { if(sum == 23 && i == 5) { succeed = 1; return; } if(i >= 5) return; DFS(i+1, sum+num[i]); DFS(i+1, sum-num[i]); DFS(i+1, sum*num[i]); } int main() { while(1) { mark = 1; for(int i = 0; i < 5; i++) { scanf("%d", &num[i]); if(num[i] != 0) mark = 0; } if(mark == 1) break; succeed = 0; sort(num, num+5); DFS(1, num[0]); while(next_permutation(num, num+5) && succeed == 0) DFS(1, num[0]); if(succeed == 1) printf("Possible\n"); else printf("Impossible\n"); } return 0; }