题意是给定5个正整数,通过加,减,乘法运算计算23,计算顺序有一定的格式要求:For this problem we will only consider arithmetic expressions of the following from:
where : {1,2,3,4,5} -> {1,2,3,4,5} is a bijective function
and {+,-,*} (1<=i<=4)
我采用回溯法,因为只有五个数,运算符和只有三个,所以复杂度并不高,也是卡着时间限AC的#include<iostream> using namespace std; int data[5]; bool ok,vis[5]; void dfs(int cur,int result) { int i; if (cur==5) { if (result==23) ok=1; } else { for (i=0;i<5;i++) { if (!vis[i]) { vis[i]=1; dfs(cur+1,result+data[i]); dfs(cur+1,result-data[i]); dfs(cur+1,result*data[i]); vis[i]=0; } } } } int main() { int a; while (cin>>a&&a) { data[0]=a; for (int i=1;i<=4;i++) { cin>>data[i]; } ok=0; for (int i=0;i<5;i++) { vis[i]=1; dfs(1,data[i]); vis[i]=0; if (ok) break; } if (ok) cout<<"Possible"<<endl; else cout<<"Impossible"<<endl; } return 0; }
uva10344 一次AC
最新推荐文章于 2020-12-20 14:21:45 发布