PAT Basic 1046. 划拳
1. 题目描述:
划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢了,输家罚一杯酒。两人同赢或两人同输则继续下一轮,直到唯一的赢家出现。
下面给出甲、乙两人的划拳记录,请你统计他们最后分别喝了多少杯酒。
2. 输入格式:
输入第一行先给出一个正整数 \(N\)(\(≤100\)),随后 \(N\) 行,每行给出一轮划拳的记录,格式为:
甲喊 甲划 乙喊 乙划
其中喊
是喊出的数字,划
是划出的数字,均为不超过 100 的正整数(两只手一起划)。
3. 输出格式:
在一行中先后输出甲、乙两人喝酒的杯数,其间以一个空格分隔。
4. 输入样例:
5
8 10 9 12
5 10 5 10
3 8 5 12
12 18 1 13
4 16 12 15
5. 输出样例:
1 2
6. 性能要求:
Code Size Limit
16 KB
Time Limit
400 ms
Memory Limit
64 MB
思路:
除草题,考察基础IO,根据题意编写对局判断子函数即可。
另外有个一直忘记提到的细节,在使用递增/递减运算符时,非必要不使用后缀形式,前缀形式效率更高(因为后缀形式会额外存储一个副本,具体可以Google),这里我使用的都是前缀形式。
My Code:
#include <stdio.h>
int judgeRound(int jiaGuess, int jiaHua, int yiGuess, int yiHua);
int main(void)
{
int roundNum = 0;
int jiaCount = 0, yiCount = 0;
int i=0;
int jiaGuess=0, jiaHua=0, yiGuess=0, yiHua=0;
scanf("%d", &roundNum);
for(i=0; i<roundNum; ++i)
{
scanf("%d%d%d%d", &jiaGuess, &jiaHua, &yiGuess, &yiHua);
switch(judgeRound(jiaGuess, jiaHua, yiGuess, yiHua))
{
case 1: //jiaWin
++yiCount;
break;
case -1: //yiWin
++jiaCount;
break;
default:
break;
}
}
printf("%d %d\n", jiaCount, yiCount);
return 0;
}
// return 1 means jia Win, -1 means Yi Win, 0 means dogfall
int judgeRound(int jiaGuess, int jiaHua, int yiGuess, int yiHua)
{
int sum = jiaGuess + yiGuess;
if(jiaHua == sum && yiHua != sum)
{
return 1;
}
else if(yiHua == sum && jiaHua != sum)
{
return -1;
}
else
{
return 0;
}
}
标签:12,PAT,1046,划拳,int,Limit,Basic,数字
From: https://www.cnblogs.com/tacticKing/p/17245762.html