华为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
计算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; }
相关文章推荐
- 华为OJ题目:24点运算
- 华为OJ24点运算
- [华为OJ--C++]107-24点运算
- 【华为OJ】【107-24点运算】
- 华为OJ——24点运算
- [华为OJ--C++]097-24点游戏算法
- 华为OJ中级题-单词倒排
- 华为OJ 初级:24点游戏算法
- 华为oj 24点游戏算法
- 华为oj初级 24点游戏算法
- 华为oj中级 字符串合并处理
- 华为OJ中级题-查找两个字符串a,b中的最长公共子串
- 华为OJ中级篇-统计每个月兔子的总数
- 华为oj之【中级】单词倒排
- 华为OJ之中级篇Ⅰ
- 华为OJ之中级篇Ⅱ
- 华为OJ中级-计算日期到天数转换
- 华为OJ中级题-字符串运用-密码截取
- 华为OJ中级题-识别有效的IP地址和掩码并进行分类统计
- 华为OJ 四则运算-java