您的位置:首页 > 其它

华为oj中级 24点运算

2017-04-05 17:40 309 查看
描述

计算24点是一种扑克牌益智游戏,随机抽出4张扑克牌,通过加(+),减(-),乘(*), 除(/)四种运算法则计算得到整数24,本问题中,扑克牌通过如下字符或者字符串表示,其中,小写joker表示小王,大写JOKER表示大王:

3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER

本程序要求实现:输入4张牌,输出一个算式,算式的结果为24点。

详细说明:

1.运算只考虑加减乘除运算,没有阶乘等特殊运算符号,友情提醒,整数除法要当心;

2.牌面2~10对应的权值为2~10, J、Q、K、A权值分别为为11、12、13、1;

3.输入4张牌为字符串形式,以一个空格隔开,首尾无空格;如果输入的4张牌中包含大小王,则输出字符串“ERROR”,表示无法运算;

4.输出的算式格式为4张牌通过+-*/四个运算符相连,中间无空格,4张牌出现顺序任意,只要结果正确;

5.输出算式的运算顺序从左至右,不包含括号,如1+2+3*4的结果为24

6.如果存在多种算式都能计算得出24,只需输出一种即可,如果无法得出24,则输出“NONE”表示无解。

知识点 字符串,循环,函数,指针,枚举,位运算,结构体,联合体,文件操作,递归

运行时间限制 10M

内存限制 128

输入

输入4张牌为字符串形式,以一个空格隔开,首尾无空格;

输出

如果输入的4张牌中包含大小王,则输出字符串“ERROR”,表示无法运算;

输出的算式格式为4张牌通过+-*/四个运算符相连,中间无空格,4张牌出现顺序任意,

只要结果正确;

输出算式的运算顺序从左至右,不包含括号,如1+2+3*4的结果为24

如果存在多种算式都能计算得出24,只需输出一种即可,如果无法得出24,

则输出“NONE”表示无解。

样例输入 A A A A

样例输出 NONE

#include<string>
#include<iostream>
using namespace std;

int b[4],b1[4];     //b为输入的四张牌,b1为输出的四张牌。
int flag[4]={0};   //表示四个数是否已经使用。
char c[3];        //c为三个运算符
int biaozhi=0;

bool dfs(int num,int result)
{
if(num==4&&result==24)
{
for(int i=0;i<3;++i)
{
if(b1[i]==1)cout<<'A';
else if(b1[i]==11)cout<<'J';
else if(b1[i]==12)cout<<'Q';
else if(b1[i]==13)cout<<'K';
else cout<<b1[i];
cout<<c[i];
}
cout<<b1[3]<<endl;
biaozhi=1;
return true;
}
for(int i=0;i<4;++i)
{
if(flag[i])continue;
b1[num]=b[i];
flag[i]=1; c[num-1]='+';
if(dfs(num+1,result+b1[num]))return true; c[num-1]='-';
if(dfs(num+1,result-b1[num]))return true;
c[num-1]='*';
if(dfs(num+1,result*b1[num]))return true;
c[num-1]='/';
if(result%b1[num]==0)
if(dfs(num+1,result/b1[num]))return true;
flag[i]=0;
}
return false;
}
int main()
{
string a[4];
while(cin>>a[0]>>a[1]>>a[2]>>a[3])
{
for(int i=0;i<4;++i)
{
if(a[i].size()>2)
{
cout<<"ERROR"<<endl;
return 0;
}
else
{
if(a[i][0]>='2'&&a[i][0]<='9')b[i]=a[i][0]-'0';
else if(a[i][0]=='1')b[i]=10;
else if(a[i][0]=='J')b[i]=11;
else if(a[i][0]=='Q')b[i]=12;
else if(a[i][0]=='A')b[i]=1;
else b[i]=13;
}
}
int k;
for(k=0;k<4;++k)
{
b1[0]=b[k];
flag[k]=1;
dfs(1,b1[0]);
flag[k]=0;
}
if(biaozhi==0)cout<<"NONE"<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: