首页 > 代码库 > dfs(vijos113424点游戏)
dfs(vijos113424点游戏)
几十年前全世界就流行一种数字扑克游戏,至今仍有人乐此不疲.在中国我们把这种游戏称为“算24点”。您作为游戏者将得到4个1-13(在扑克牌里用A代替1,J代替11,Q代替12,K代替13)之间的自然数作为操作数,而您的任务是对这4个操作数进行适当的算术运算,判断运算结果是否等于24。能输出1,不能输出0。您可以使用的运算只有:**+,-,*,/**,您还可以使用**(,)**来改变运算顺序。注意:**所有的中间结果须是整数**,所以一些除法运算是不允许的(例如,**(2*2)/4**是合法的,**2*(2/4)**是不合法的)。下面我们给出一个游戏的具体例子:若给出的4个操作数是:1、2、3、7,则一种可能的解答是**1+2+3*7=24**。
样例输入1
样例输出1
#include<bits/stdc++.h>using namespace std;bool book[5];double w[5];int ok=0;int flag=0;void dfs(double sum,int n){ if(flag) return ; if(n==4&&(sum-24)*(sum-24)<=1e-5) { ok=1;flag=1; } for(int i=1;i<=4;i++) { if(!book[i]) { book[i]=1; dfs(sum+w[i],n+1); dfs(sum-w[i],n+1); dfs(sum*w[i],n+1); dfs(w[i]-sum,n+1); if(w[i]!=0) dfs(sum/w[i],n+1); if(sum!=0) dfs(w[i]/sum,n+1); book[i]=0; } }}int main(){ string s; for(int i=1;i<=4;i++) { cin>>s; if(s=="10") { w[i]=10;continue; } if(s[0]==‘A‘) w[i]=1; if(s[0]==‘J‘) w[i]=11; if(s[0]==‘K‘) w[i]=13; if(s[0]==‘Q‘) w[i]=12; if(s[0]<‘A‘) w[i]=s[0]-‘0‘; } for(int i=1;i<=4;i++) { book[i]=1; dfs(w[i],1); book[i]=0; } cout<<ok<<endl; return 0;}
dfs(vijos113424点游戏)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。