华为oj中级 24点运算
来源:互联网 发布:网络上不受欢迎的行为 编辑:程序博客网 时间:2024/06/17 21:11
描述
计算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点运算
- 华为OJ题目:24点运算
- 【华为OJ】【107-24点运算】
- [华为OJ--C++]107-24点运算
- 华为OJ——24点运算
- 华为oj中级 笔画
- 华为oj中级 线性插值
- 华为oj中级 【中级】单词倒排
- 华为oj 24点游戏
- 华为oj--中级--购物单
- 华为OJ 中级:字符串排序
- 华为OJ 中级:汽水瓶
- 华为OJ题解(中级)
- 华为OJ 中级 字符串排序
- 华为oj中级 购物单
- 华为oj中级 坐标移动
- 华为oj中级 汽水瓶
- 华为oj中级 字符串排序
- C++中string.find()函数与string::npos
- hibernate validator组校验,同时校验多个组
- 马拦过河卒
- 关于Beta分布、二项分布与Dirichlet分布、多项分布的关系
- android Wifi 设置静态ip地址的方法
- 华为oj中级 24点运算
- Rancher 容器无法ping通原因
- C++中参数传递的方式
- 银行结算户和储蓄户区别
- 注册建筑师取消【官方已公布】
- Centos 6.4 python 2.6 升级到 2.7
- js常用正则
- java 得到10个1至20之间的随机数,要求不能重复,并将这10个数装入到数组中
- c++中const修饰类及其成员小结