PTA 7-21 二十四点游戏

该文描述了一个验证24点游戏表达式的程序,程序接收多个表达式,检查它们是否能通过加减乘除运算得到24。如果表达式语法错误,输出ERROR并终止程序;结果正确输出Yes,否则输出No。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二十四点是一款著名的纸牌游戏,其游戏的目标是使用 3 个加减乘除运算使得 4 张纸牌上数字的运算结果为 24。定义每一个游戏由4个数字和3个四则运算符组成,可能存在括号和其他字符,运算顺序按照四则运算规则进行。其中加法用符号+表示,减法用符号-表示,乘法用可以是小写字母x,也可以是*表示,除法用符号/表示。在游戏里除法为整除,例如 3 / 5 = 0,5 / 2 = 1,4 / 2 = 2。现在给你n个表达式,请编写程序验证每个表达式的结果是否为 24。如果表达式逻辑错误,则输出“ERROR”,并终止程序。

输入格式:

从标准输入读入数据。
第一行输入一个整数n,从第2行开始到第n+1行中,每一行一个表达式字符串 ,表示24 点游戏,数据格式不一定合法。

输出格式:

输出到标准输出。

包含n行,对于每一个游戏,如果其结果为24则输出字符串 Yes,如果表达式逻辑正确但是结果错误则输出字符串 No,否则输出字符串ERROR,并终止程序。

输入样例:

在这里给出一组输入。例如:

10
(3-2/2)x12
(4-1)*6+6
7-9-9+8
(10+2)/2x4
3+5+7+9
1*1+9-9
1x9)-5/9
8/5+6S9
6x7-3x6
6x4+4/5

输出样例:

在这里给出相应的输出。例如:

Yes Yes No Yes Yes No ERROR

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

n,ls=eval(input()),[]
result=[]
for i in range(n):
    ls.append(input())
for i in range(n):
    if 'x' in ls[i]:
        ls[i]=ls[i].replace('x','*')
    elif '/' in ls[i]:
        ls[i]=ls[i].replace('/','//')
    try:
        s = eval(ls[i])
    except SyntaxError:
        result.append('ERROR')
        break
    else:
        if s==24:
            result.append('Yes')
        else:
            result.append('No')
print(' '.join(str(i) for i in result))

关于 PTA 题库中的 **7-20 趣味游戏**,虽然未直接提及该具体题目在洛谷或其他平台上的对应关系[^1],但可以推测此题可能涉及基础算法或逻辑设计的内容。以下是基于常见编程练习题目的分析与解答。 --- ### 7-20 趣味游戏 #### 题目描述 假设某趣味游戏中有若干玩家参与,每位玩家需输入自己的得分情况。程序应统计并输出最高分以及对应的玩家编号。如果存在多个相同最高分,则按输入顺序优先输出第一个达到最高分的玩家。 #### 输入格式 第一行为整数 `n` (1 ≤ n ≤ 100),表示玩家数量; 第二行为 `n` 个正整数,分别代表各玩家的分数。 #### 输出格式 两行: - 第一行为最高分; - 第二行为获得最高分的玩家编号(从 1 开始计数)。 #### 示例 ```plaintext 输入: 5 89 76 92 81 92 输出: 92 3 ``` --- #### 解决方案 通过遍历数组的方式找到最大值及其索引位置即可完成任务。以下是 C++ 实现代码: ```cpp #include <iostream> using namespace std; int main() { int n; cin >> n; // 输入玩家人数 int maxScore = -1, playerIndex = -1; for(int i = 1; i <= n; ++i){ int score; cin >> score; // 输入当前玩家分数 if(score > maxScore){ // 更新最大值及对应玩家编号 maxScore = score; playerIndex = i; } } cout << maxScore << endl; // 输出最高分 cout << playerIndex << endl; // 输出对应玩家编号 return 0; } ``` 上述代码实现了基本功能,包括读取数据、比较大小以及最终结果输出。 --- ### 注意事项 对于初学者而言,在处理此类问题时需要注意边界条件,比如当只有一个玩家或者所有玩家得分为零的情况下的表现是否符合预期。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值