- 原题链接:Here!
- 思路:这是get的别人的代码,写的很棒,用next_permutation()取代了括号的作用,精髓,经典
- 代码:
/* Note: 代码写的非常(๑•̀ㅂ•́)و✧ 用next_permutation()代替括号的作用 */ #include<bits/stdc++.h> using namespace std; //#define test int res[4]; bool ok; void dfs(int sum,int cur,int temp){ if(ok) return; if(cur==3){ if(sum+temp==24) ok=true; if(sum-temp==24) ok=true; if(sum*temp==24) ok=true; if(temp!=0 && sum%temp==0 && sum/temp==24) ok=true; return; } dfs(sum+temp,cur+1,res[cur+1]); dfs(sum-temp,cur+1,res[cur+1]); dfs(sum*temp,cur+1,res[cur+1]); if(temp!=0 && sum%temp==0) dfs(sum/temp,cur+1,res[cur+1]); dfs(sum,cur+1,temp+res[cur+1]); dfs(sum,cur+1,temp-res[cur+1]); dfs(sum,cur+1,temp*res[cur+1]); if(res[cur+1]!=0 && temp%res[cur+1]==0) dfs(sum,cur+1,temp/res[cur+1]); } int main(){ char s[4]; #ifdef test freopen("test.txt","r",stdin); #endif while(1){ for(int i=0;i<4;i++){ if(scanf("%s",s)==EOF) return 0; if(s[0] == 'A') res[i] = 1; else if(s[0] == 'J') res[i] = 11; else if(s[0] == 'Q') res[i] = 12; else if(s[0] == 'K') res[i] = 13; else if(s[0] == '1' && s[1] == '0') res[i] = 10; else res[i] = s[0] - '0'; } sort(res,res+4); ok=false; do{ dfs(res[0],1,res[1]); }while(next_permutation(res,res+4) && !ok); if(ok) printf("Yes\n"); else printf("No\n"); } return 0; }