ccf二十四点Java_CCF 201903-2 二十四点【枚举法】

本文介绍了一种使用Java实现CCF 24点游戏的算法,通过枚举运算符的组合,检查是否能得出24点。代码中详细展示了如何处理不同运算符的优先级并进行计算。
摘要由CSDN通过智能技术生成

目录

一、题目

cf65520a9db21a3e804c0f156d9af5b2.png

二、解析

枚举法:

由题可知,输入固定为7个字符:d1、s1、d2、s2、d3、s3、d4。

其中,d1、d2、d3、d4是数字,s1、s2、s3是运算符号。

设运算符号x、/的等级为1,+、-的等级为0,则s1、s2、s3的组合有:

000 -> 0

001 -> 1

010 -> 10

011 -> 11

100 -> 100

101 -> 101

110 -> 110

111 -> 111

共8种。

枚举这8种运算即可。

三、代码

#include

#include

using namespace std;

int n;

int d1, d2, d3, d4;

char s1, s2, s3;

//运算符号的等级

map rank;

int cal(int n1, char s, int n2)

{

int answer;

switch (s) {

case 'x':

answer = n1 * n2;

break;

case '/':

answer = n1 / n2;

break;

case '+':

answer = n1 + n2;

break;

case '-':

answer = n1 - n2;

break;

}

return answer;

}

void calculate()

{

int type = rank[s1] * 100 + rank[s2] * 10 + rank[s3];

//cout<

int points;

switch (type) {

case 0:

points = cal(cal(cal(d1, s1, d2), s2, d3), s3, d4);

break;

case 1:

points = cal(cal(d1, s1, d2), s2, cal(d3, s3, d4));

break;

case 10:

points = cal(cal(d1, s1, cal(d2, s2, d3)), s3, d4);

break;

case 11:

points = cal(d1, s1, cal(cal(d2, s2, d3), s3, d4));

break;

case 100:

points = cal(cal(cal(d1, s1, d2), s2, d3), s3, d4);

break;

case 101:

points = cal(cal(d1, s1, d2), s2, cal(d3, s3, d4));

break;

case 110:

points = cal(cal(cal(d1, s1, d2), s2, d3), s3, d4);

break;

case 111:

points = cal(cal(cal(d1, s1, d2), s2, d3), s3, d4);

break;

}

//cout<

if (points == 24)

cout << "Yes" << endl;

else

cout << "No" << endl;

}

int main()

{

rank['x'] = 1;

rank['/'] = 1;

rank['+'] = 0;

rank['-'] = 0;

cin >> n;

for (int i = 0; i < n; i++) {

cin >> d1 >> s1 >> d2 >> s2 >> d3 >> s3 >> d4;

//cout<

calculate();

}

return 0;

}

输入:

10

9+3+4x3

5+4x5x5

7-9-9+8

5x6/5x4

3+5+7+9

1x1+9-9

1x9-5/9

8/5+6x9

6x7-3x6

6x4+4/5

输出:

Yes

No

No

Yes

Yes

No

No

No

Yes

Yes

标签:二十四点,枚举法,s3,s2,s1,cal,d4,CCF,d2

来源: https://blog.csdn.net/weixin_43826681/article/details/111056149

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值