标签:二十四点 枚举法 s3 s2 s1 cal d4 CCF d2
目录
一、题目
二、解析
枚举法:
由题可知,输入固定为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 <iostream>
#include <map>
using namespace std;
int n;
int d1, d2, d3, d4;
char s1, s2, s3;
//运算符号的等级
map<char, int> 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<<type<<endl;
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<<points<<endl;
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<<d1<<s1<<d2<<s2<<d3<<s3<<d4<<endl;
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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。