一道让我差点吐血的题呀,不是说有多么难想,而是因为有一个小细节卡了我好长时间,而如果好好读题或者养成一个良好的编程习惯的话是完全可以避免这种问题的,这个问题就是ftans中参数的顺序不同就能导致不同的中间结果呀....吐血一分钟
#include <iostream> #include <cstring> #include <cstdio> #include <cmath> #include <cstdlib> using namespace std ; int a[5] , vis[5] ; int flag ; char oo[] = { '+' , '-' , '*' } ; void init() { memset( vis , 0 , sizeof( vis ) ) ; flag = 0 ; return ; } void input() { for( int i = 1 ; i < 5 ; ++i ) cin >> a[i] ; return ; } int ftans( int x , int y , int o ) { switch( o ) { case 0 : return x+y ; case 1 : return x-y ; case 2 : return x*y ; } } void dfs( int cur , int tans ) { if( flag ) { return ; } if( cur == 5 ) { if( tans == 23 ) { flag = 1 ; return ; } return ; } for( int i = 0 ; i < 5 ; ++i ) { if( !vis[i] ) { vis[i] = 1 ; dfs( cur+1 , ftans( tans , a[i] , 0 ) ) ; dfs( cur+1 , ftans( tans , a[i] , 1 ) ) ; dfs( cur+1 , ftans( tans , a[i] , 2 ) ) ; vis[i] = 0 ; } if( flag ) break ; } } void solve() { for (int i = 0; i < 5; ++i) { vis[i] = 1 ; dfs( 1 , a[i] ) ; vis[i] = 0 ; } return ; } void output() { if( flag ) cout << "Possible" << endl ; else cout << "Impossible" << endl ; return ; } int main() { while( cin >> a[0] && a[0] ) { init() ; input() ; solve() ; output() ; } return 0 ; }