Question: There are five counts and three arithmetic operations: +-*. can I obtain 23 for each arithmetic operation on five counts.
Train of Thought: simply search. Use next_permutation to find the sorting and search again.
//0 KB719 ms#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;int a[5];bool flag;void DFS(int pre,int cur){ if (flag) return ; if (cur == 5&&pre == 23) { flag = true; return ; } if (cur > 4) return ; for (int i = 0;i < 3;i ++) { if (i == 0) DFS(pre+a[cur],cur+1); if (i == 1) DFS(pre-a[cur],cur+1); if (i == 2) DFS(pre*a[cur],cur+1); }}int main (){ #ifdef LOCAL freopen("in.txt","r",stdin); #endif int i,cnt; while (1) { cnt = 0; for (i = 0;i < 5;i ++) { scanf ("%d",&a[i]); if (!a[i]) cnt ++; } if (cnt == 5) break; sort(a,a+5); flag = false; do { DFS(a[0],1); }while (next_permutation(a,a+5)&&!flag); if (flag) printf ("Possible\n"); else printf ("Impossible\n"); } return 0;}