「PAT乙级真题解析」Basic Level 1046 划拳 (问题分析+完整步骤+伪代码描述+提交通过代码)
题设要求统计甲乙两人划拳分别喝了几杯酒。所以这是一道“统计题”。 我们之前的题目多次提到,统计题的关键在于明确统计数据以及数据的存储。 这里要统计的数据是喝酒的次数,由于是两个数值, 用数值变量储存即可, 没有特别需要注意的地方。
#算法#数据结构#需求分析#pat考试#c语言
Table of Contents
乙级的题目训练主要用来熟悉编程语言的语法和形成良好的编码习惯和编码规范。从小白开始逐步掌握用编程解决问题。
问题分析
题设要求统计甲乙两人划拳分别喝了几杯酒。所以这是一道“统计题”。 我们之前的题目多次提到,统计题的关键在于明确统计数据以及数据的存储。 这里要统计的数据是喝酒的次数,由于是两个数值, 用数值变量储存即可, 没有特别需要注意的地方。
完整描述步骤
- 获取输入: 划拳回合数目, 划拳出拳信息
- 初始化计数器: 乙喝酒次数=0, 甲喝酒次数=0
- 对于每一次划拳: 如果甲出拳的数字等于两人喊出的数字之和, 且乙出拳的数字不等于两数之和: 则, 乙喝酒次数+1 如果乙出拳的数字等于两人喊出的数字之和, 且甲出拳的数字不等于两数之和: 则, 甲喝酒次数+1
- 输出甲乙分别喝酒的次数
伪代码描述
1. get input: case_amount
2. init counter: A_drink_amout = 0; B_drink_amout = 0;
3. for each case:
yell_sum = A_yell + B_yell
if yell_sum == number of A's hand
and yell_sum != number of B's hand:
B_drink_amout++;
if yell_sum != number of A's hand
and yell_sum == number of B's hand:
A_drink_amout++;
4. print(A_drink_amout, B_drink_amout)
完整提交代码
/*
# 问题分析
题设要求统计甲乙两人划拳分别喝了几杯酒。所以这是一道“统计题”。
我们之前的题目多次提到,统计题的关键在于明确统计数据以及数据的存储。
这里要统计的数据是喝酒的次数,由于是两个数值, 用数值变量储存即可, 没有特别需要注意的地方。
# 完整描述步骤
1. 获取输入: 划拳回合数目, 划拳出拳信息
2. 初始化计数器: 乙喝酒次数=0, 甲喝酒次数=0
3. 对于每一次划拳:
如果甲出拳的数字等于两人喊出的数字之和, 且乙出拳的数字不等于两数之和:
则, 乙喝酒次数+1
如果乙出拳的数字等于两人喊出的数字之和, 且甲出拳的数字不等于两数之和:
则, 甲喝酒次数+1
4. 输出甲乙分别喝酒的次数
# 伪代码描述
1. get input: case_amount
2. init counter: A_drink_amout = 0; B_drink_amout = 0;
3. for each case:
yell_sum = A_yell + B_yell
if yell_sum == number of A's hand
and yell_sum != number of B's hand:
B_drink_amout++;
if yell_sum != number of A's hand
and yell_sum == number of B's hand:
A_drink_amout++;
4. print(A_drink_amout, B_drink_amout)
*/
# include<stdio.h>
int main() {
int A_drink_amout = 0, B_drink_amout = 0;
int case_amount;
scanf("%d", &case_amount);
int detail[4];
int sum = 0;
for (int i = 0; i < case_amount; i++) {
for (int i = 0; i < 4; i++) {
scanf("%d", &detail[i]);
}
sum = detail[0] + detail[2];
if (detail[1] == sum && detail[3] != sum) {
B_drink_amout++;
}
if (detail[1] != sum && detail[3] == sum) {
A_drink_amout++;
}
}
printf("%d %d", A_drink_amout, B_drink_amout);
return 0;
}