P1236 算24点
Posted feiief
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1236 算24点相关的知识,希望对你有一定的参考价值。
1 #include <bits/stdc++.h> 2 # define LL long long 3 using namespace std; 4 5 bool dfs(vector<int> &num, vector<string> &res){ 6 if(num.size()==1) { 7 if(num[0]==24) return true; 8 return false; 9 } 10 11 string tmp; 12 vector<int> nexted; 13 for(int i=0;i<num.size()-1;++i){ 14 15 for(int j=i+1;j<num.size();++j){ 16 int a=num[i]; 17 int b=num[j]; 18 19 if(a<b) swap(a,b); 20 21 nexted.clear(); 22 for(int k=0;k<num.size();++k){ 23 if(k==i || k==j) continue; 24 nexted.push_back(num[k]); 25 } 26 nexted.push_back(a+b); 27 tmp=to_string(a)+"+"+to_string(b)+"="+to_string(a+b); 28 res.push_back(tmp); 29 if(dfs(nexted,res)) return true; 30 res.pop_back(); 31 32 nexted.clear(); 33 for(int k=0;k<num.size();++k){ 34 if(k==i || k==j) continue; 35 nexted.push_back(num[k]); 36 } 37 nexted.push_back(a-b); 38 39 tmp=to_string(a)+"-"+to_string(b)+"="+to_string(a-b); 40 res.push_back(tmp); 41 if(dfs(nexted,res)) return true; 42 res.pop_back(); 43 44 nexted.clear(); 45 vector<int> tmpv; 46 for(int k=0;k<num.size();++k){ 47 if(k==i || k==j) continue; 48 nexted.push_back(num[k]); 49 } 50 nexted.push_back(a*b); 51 tmp=to_string(a)+"*"+to_string(b)+"="+to_string(a*b); 52 res.push_back(tmp); 53 if(dfs(nexted,res)) return true; 54 res.pop_back(); 55 56 if(b!=0 && a%b==0){ 57 nexted.clear(); 58 for(int k=0;k<num.size();++k){ 59 if(k==i || k==j) continue; 60 nexted.push_back(num[k]); 61 } 62 nexted.push_back(a/b); 63 tmp=to_string(a)+"/"+to_string(b)+"="+to_string(a/b); 64 res.push_back(tmp); 65 if(dfs(nexted,res)) return true; 66 res.pop_back(); 67 } 68 } 69 } 70 return false; 71 } 72 73 int main(){ 74 vector<int> num(4,0); 75 for(int i=0;i<4;++i){ 76 int t; 77 scanf("%d", &t); 78 num[i]=t; 79 } 80 vector<string> res; 81 bool r=dfs(num,res); 82 if(!r){ 83 printf("No answer! "); 84 return 0; 85 } 86 for(auto &s:res){ 87 cout<<s<<" "; 88 } 89 return 0; 90 }
以上是关于P1236 算24点的主要内容,如果未能解决你的问题,请参考以下文章