Problem I 23 Out of 5
Input: standard inputOutput: standard output
Time Limit: 1 secondMemory Limit: 32 MB
这几天做的都是水题,这题也不例外,其实也不要说是水题,如果排列不是靠next_permination,那么也不会这么清楚地做出来,暴力求解生成23点是比较简单,题目的意思就不要多去纠结,只要按顺序计算就是了
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 int digit[6]; 6 int ans = 0; 7 void Traverse(int cur, int sum) 8 { 9 if(cur > 5) 10 { 11 if(sum == 23) ans = 1; 12 return; 13 } 14 else 15 { 16 Traverse(cur+1, sum*digit[cur]); 17 Traverse(cur+1, sum+digit[cur]); 18 Traverse(cur+1, sum-digit[cur]); 19 return; 20 } 21 } 22 23 int main() 24 { 25 while(1) 26 { 27 int flag, i; 28 for(flag=i=0; i<5; ++i) 29 { 30 scanf("%d", &digit[i]); 31 if(digit[i] != 0) flag = 1; 32 } 33 if(!flag) break; 34 sort(digit, digit+5); 35 ans = 0; 36 do 37 { 38 Traverse(1, digit[0]); 39 }while(next_permutation(digit, digit+5)); 40 if(ans) printf("Possible\n"); 41 else printf("Impossible\n"); 42 } 43 44 return 0; 45 }