HDU 1427-速算24點(DFS)
速算24點相信絕大多數人都玩過。就是隨機給你四張牌,包括A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13)。要求只用'+','-','*','/'運算子以及括號改變運算順序,使得最終運算結果為24(每個數必須且僅能用一次)。遊戲很簡單,但遇到無解的情況往往讓人很鬱悶。你的任務就是針對每一組隨機產生的四張牌,判斷是否有解。我們另外規定,整個計算過程中都不能出現小數。
Input
每組輸入資料佔一行,給定四張牌。
Output
每一組輸入資料對應一行輸出。如果有解則輸出"Yes",無解則輸出"No"。
Sample Input
A 2 3 6
3 3 8 8
Sample Output
Yes
No
思路:赤裸裸的爆搜。暴力搜尋全排列,需要注意使用全排列前要排個序。(忘了,調好久......)
注意一下如何處理括號的優先順序:只有4個數,所以最多有2對括號,也就是說這個表示式分成內外2部分,從這一點入手,在暴力的時候分一下。在原先的4則運算下再加一個分開的優先運算即可。詳情見程式碼
程式碼如下:
#include<set>
#include<map>
#include<list>
#include<deque>
#include<cmath>
#include<queue>
#include<stack>
#include<string>
#include<vector>
#include<stdio.h>
#include<sstream>
#include<stdlib.h>
#include<string.h>
//#include<ext/rope>
#include<iostream>
#include<algorithm>
#define pi acos(-1.0)
#define INF 0x3f3f3f3f
#define per(i,a,b) for(int i=a;i<=b;++i)
#define LL long long
#define swap(a,b) {int t=a;a=b;b=t}
using namespace std;
//using namespace __gnu_cxx;
int p[4],fag=0;
void fun(char a,char b,int x)
{
if(a=='A') p[x]=1;
else if(a=='J') p[x]=11;
else if(a=='Q') p[x]=12;
else if(a=='K') p[x]=13;
else if(a=='1'&&b=='0') p[x]=10;
else p[x]=a-'0';
}
void dfs(int x,int y,int z)
{
if(fag==1) return ;
if(x==3)
{
if(y+z==24) fag=1;
if(y-z==24) fag=1;
if(y*z==24) fag=1;
if(z!=0&&y%z==0&&y/z==24) fag=1;
return ;
}
dfs(x+1,y+z,p[x+1]);
dfs(x+1,y-z,p[x+1]);
dfs(x+1,y*z,p[x+1]);
if(z!=0&&y%z==0) dfs(x+1,y/z,p[x+1]);
dfs(x+1,y,z+p[x+1]);
dfs(x+1,y,z-p[x+1]);
dfs(x+1,y,z*p[x+1]);
if(p[x+1]!=0&&z%p[x+1]==0) dfs(x+1,y,z/p[x+1]);
}
int main()
{
string a,b,c,d;
while(cin>>a>>b>>c>>d)
{
fag=0;
fun(a[0],a[1],0);fun(b[0],b[1],1);
fun(c[0],c[1],2);fun(d[0],d[1],3);
sort(p,p+4);
do{
dfs(1,p[0],p[1]);
}while(next_permutation(p,p+4)&&fag==0);
if(fag==1) printf("Y\n");
else printf("N\n");
}
return 0;
}
相關文章
- HDU1427速算24點(dfs)
- 撲克牌速算24 -窮舉(JavaScript)JavaScript
- HDU - 2553 N皇后問題(DFS)
- hdu 6446 Tree and Permutation(dfs+思維)
- leetcode 679. 24 Game(遊戲24點)LeetCodeGAM遊戲
- 24/04/13 CF494C Helping People / HDU5866 Lucky E
- dfs列印有向圖的起點到終點路徑
- NYOJ 1427-小石子游戲【石子合併】
- DFS
- 24點 Pascal大暴力程式
- 每天進步一點點 2020/09/24
- hdu 2111 Saving HDU (DP)
- HDU 3074 Multiply game(線段樹 單點更新)GAM
- dfs序
- DFS樹
- dfs技巧
- Python實現24點遊戲Python遊戲
- JS實現24點遊戲JS遊戲
- 深搜dfs
- Tempter of the Bone(DFS)
- 你來寫,“Calca”來快速算出計算結果
- iOS 小遊戲專案——數字速算升級版iOS遊戲
- Shape of HDU
- HDU 3349
- 24-分析要點:怎麼辦(2)
- Python秒算24點,行還是不行?Python
- DAG bfs + dfs 126,
- 樹的DFS序
- Prime Ring Problem (dfs)
- HDU 2052(C語言+註釋)+HDU 2090C語言
- HDU 1166 敵兵佈陣 (線段樹 插點問線)
- HDU 1556【區間更新+單點查詢 樹狀陣列】陣列
- LightOJ1074 Extended Traffic【SPFA+DFS 標記負環的結點】
- 簡單的揹包問題(入門)HDU2602 HDU2546 HDU1864
- HDU 1240 Asteroids!AST
- hdu2083
- hdu5532
- HDU4787