hdu 1427 速算24点【暴力枚举】
速算24点
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 6946 Accepted Submission(s): 1828
Problem Description
速算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
Author
LL
Source
ACM暑期集训队练习赛(三)
因规模不大,直接暴力枚举了所有情况。
AC代码如下:
//1427
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int sum(int a,int b,int c,int d) //枚举不加括号所有情况
{
char str[4]={'+','-','*','/'};
int i,j,k,l,ans=0,n,m,p;
for(i=0;i<2;i++)
{
ans=0;
if(i==1)
ans-=a;
else
ans+=a;
n=ans;
for(j=0;j<4;j++)
{ans=n;
if(j==0)
ans+=b;
else if(j==1)
ans-=b;
else if(j==2)
ans*=b;
else
if(ans%b==0&&b!=0)
ans/=b;
else
continue;
m=ans;
for(k=0;k<4;k++)
{ans=m;
if(k==0)
ans+=c;
else if(k==1)
ans-=c;
else if(k==2)
ans*=c;
else
if(ans%c==0&&c!=0)
ans/=c;
else
continue;
p=ans;
for(l=0;l<4;l++)
{ans=p;
if(l==0)
ans+=d;
else if(l==1)
ans-=d;
else if(l==2)
ans*=d;
else
if(ans%d==0&&d!=0)
ans/=d;
else
continue;
if(ans==24)
{
//printf("%c%d%c%d%c%d%c%d=%d\n",str[i],a,str[j],b,str[k],c,str[l],d,ans); //输出算式
return 1;
}
}
}
}
}
return 0;
}
int kh(int a,int b,int c,int d) //枚举加括号的所有情况
{
char str[4]={'+','-','*','/'};
int ans,bns,sum,i,j,k,l;
for(i=0;i<4;i++)
{
ans=0;
if(i==0)
ans=a+b;
else if(i==1)
ans=a-b;
else if(i==2)
ans=a*b;
else
if(i==3&&a%b==0)
ans=a/b;
else
continue;
for(j=0;j<4;j++)
{
bns=0;
if(j==0)
bns=c+d;
else if(j==1)
bns=c-d;
else if(j==2)
bns=c*d;
else
if(j==3&&c%d==0)
bns=c/d;
else
continue;
for(k=0;k<4;k++)
{
sum=0;
if(k==0)
sum=ans+bns;
else if(k==1)
sum=ans-bns;
else if(k==2)
sum=ans*bns;
else
if(k==3&&bns!=0&&ans%bns==0)
sum=ans/bns;
else
continue;
if(sum==24)
{
//printf("(%d%c%d)%c(%d%c%d)=%d\n",a,str[i],b,str[k],c,str[j],d,sum); //输出算式
return 1;
}
}
}
}
return 0;
}
int main()
{
int a,b,c,d,i,aa[4];
char temp[4][3];
char aAA[14][3]={"0","A","2","3","4","5","6","7","8","9","10","J","Q","K"};
while(scanf("%s %s %s %s",temp[0],temp[1],temp[2],temp[3])!=EOF)
{
int f=0;
for(int i=0;i<4;i++)//把牌转换成对应的数字
{
for(int j=1;j<=13;j++)
if(strcmp(temp[i],aAA[j])==0)
{
aa[i]=j;
break;
}
}
for(a=0;a<4;a++) //全排
{
if(f==1) break;
for(b=0;b<4;b++)
{
if(f==1) break;
if(b==a) continue;
for(c=0;c<4;c++)
{
if(f==1) break;
if(c==a||c==b) continue;
d=6-a-b-c;
if(sum(aa[a],aa[b],aa[c],aa[d])||kh(aa[a],aa[b],aa[c],aa[d]))
{
printf("Yes\n");
f=1;
break;
}
}
}
}
if(f==0)
printf("No\n");
}
return 0;
}
---------------------
作者:yongtaozheng
来源:CSDN
原文:https://blog.csdn.net/Twinkle_sone/article/details/95041176
版权声明:本文为博主原创文章,转载请附上博文链接!
hdu 1427 速算24点【暴力枚举】的更多相关文章
- hdu 1427 速算24点
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1427 速算24点 Description 速算24点相信绝大多数人都玩过.就是随机给你四张牌,包括A( ...
- hdu 1427 速算24点 dfs暴力搜索
速算24点 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem De ...
- HDU 1427 速算24点 (深搜)
题目链接 Problem Description 速算24点相信绝大多数人都玩过.就是随机给你四张牌,包括A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13).要求只用' ...
- HDU 1427 速算24点【数值型DFS】
速算24点 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- 24点游戏&&速算24点(dfs)
24点游戏 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit Sta ...
- Hdu1427 速算24点 2017-01-18 17:26 46人阅读 评论(0) 收藏
速算24点 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submiss ...
- hdu1427之速算24点
速算24点 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- hdu 4082 Hou Yi's secret(暴力枚举)
Hou Yi's secret Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU - 1248 寒冰王座 数学or暴力枚举
思路: 1.暴力枚举每种面值的张数,将可以花光的钱记录下来.每次判断n是否能够用光,能则输出0,不能则向更少金额寻找是否有能够花光的.时间复杂度O(n) 2.350 = 200 + 150,买350的 ...
随机推荐
- 04-树5 Root of AVL Tree (25 分)
An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child sub ...
- python 一个二维数组和一个整数,判断数组中是否含有该整数
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序. 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. de ...
- 一种SpaceClaim抽取流道的方法——利用缺失的面功能
针对不干净的几何,内部存在诸多碎面小缝隙,采用此方法可能会有较好的效果,不过需要耐心. 测试几何需要SpaceClaim19.0以上软件可以打开,下载链接: https://pan.baidu.com ...
- zabbix监控ESXI主机
ESXI6.0默认SSH关闭的,打开SSH的方法如下图: SSH打开后,主机会有警报,关闭警报的方法如下图 esxcli system snmp set --communities publi ...
- 拼多多面试真题:如何用 Redis 统计独立用户访问量!
阅读本文大概需要 2.8 分钟. 作者:沙茶敏碎碎念 众所周至,拼多多的待遇也是高的可怕,在挖人方面也是不遗余力,对于一些工作 3 年的开发,稍微优秀一点的,都给到 30K 的 Offer. 当然,拼 ...
- Http、Socket、WebSocket之间联系与区别
WebSocket和Socket区别 可以把WebSocket想象成HTTP(应用层),HTTP和Socket什么关系,WebSocket和Socket就是什么关系. HTTP 协议有一个缺陷:通信只 ...
- Apache Kylin 简介
http://kylin.apache.org/docs/index.html https://www.infoq.cn/article/vOrjsJCgVAVPim5hsj6p Kylin 的核心思 ...
- eclispe: 修改所有文件默认编码为UTF-8
1.修改 workspace text file encoding 依次点击windows -> Preferences -> general -> Workspace,修改如图的编 ...
- git 常用命令的总结
1. git 查看分支 git branch (星号代表当前的分支) 2. 创建一个本地分支 git checkout -b 分支名称 3. 将本地新建分支提交到远程 git push origin ...
- 650. Find Leaves of Binary Tree
class Solution { public: vector<vector<int>> findLeaves(TreeNode* root) { vector<vect ...