20 分 PAT:B1018 锤子剪刀布

PAT:B1018锤子剪刀布(20分)
大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势 , 胜负规则如图所示:

20 分  PAT:B1018 锤子剪刀布

文章插图
现给出两人的交锋记录 , 请统计双方的胜、平、负次数 , 并且给出双方分别出什么手势的胜算最大 。
输入格式:
输入第 1 行给出正整数N(≤10?5??) , 即双方交锋的次数 。随后N行 , 每行给出一次交锋的信息 , 即甲、乙双方同时给出的的手势 。C代表“锤子”、J代表“剪刀”、B代表“布” , 第 1 个字母代表甲方 , 第 2 个代表乙方 , 中间有 1 个空格 。
输出格式:
20 分  PAT:B1018 锤子剪刀布

文章插图
输出第 1、2 行分别给出甲、乙的胜、平、负次数 , 数字间以 1 个空格分隔 。第 3 行给出两个字母 , 分别代表甲、乙获胜次数最多的手势 , 中间有 1 个空格 。如果解不唯一 , 则输出按字母序最小的解 。
输入样例:
10C JJ BC BB BB CC CC BJ BB CJ J
输出样例:
5 3 22 3 5B B
思路:
定义两个数组 , 分别代表甲 , 乙 。用锤子 , 剪刀 , 布赢得次数 。
可以获得甲乙赢得最多的手势 , 统计之后可获得甲 , 乙赢得次数 , 也就是对方输的次数 。再用count得到两个人平的次数 。
注意:如果解不唯一 , 输出字母最小的解 。因此可以将字符数组定义成{'B', 'C', 'J'};
代码:
C/C++:
#include#include#includeusing namespace std;// 思路:输出A和B的石头剪刀布的次数// 输出:Awin 平局 Bwin//赢得最多的手势const int maxn = 100010; int whoWin(char a, char b) {if((a == 'C') && (b == 'C')) {return 0;} else if((a == 'C') && (b == 'J')) {return 1;} else if((a == 'C') && (b == 'B')) {return -1;} else if((a == 'J') && (b == 'C')) {return -1;} else if((a == 'J') && (b == 'J')) {return 0;} else if((a == 'J') && (b == 'B')) {return 1;} else if((a == 'B') && (b == 'C')) {return 1;} else if((a == 'B') && (b == 'J')) {return -1;} else if((a == 'B') && (b == 'B')) {return 0;}}int findHand(char a) {if(a == 'C') return 1;else if(a == 'J') return 2;else if(a == 'B') return 0;}char hand[3] = {'B', 'C', 'J'};int main() {int n, winA[3] = {0}, handA[3] = {0}, handB[3] = {0}, maxA = -1, maxB = -1;int cA, cB; char a, b;scanf("%d", &n);for(int i = 0; i < n; i++) {getchar();scanf("%c %c", &a, &b);int x = whoWin(a, b);int y = findHand(a);int z = findHand(b);if(x == 0) {winA[1]++;} else if(x == 1) {winA[0]++;handA[y]++;} else if(x == -1) {winA[2]++;handB[z]++;}}for(int i = 0; i < 3; i++) {if(maxA < handA[i]) {maxA = handA[i];cA = i;}if(maxB < handB[i]) {maxB = handB[i];cB = i;}}printf("%d %d %d\n", winA[0], winA[1], winA[2]);printf("%d %d %d\n", winA[2], winA[1], winA[0]);printf("%c %c\n", hand[cA], hand[cB]);return 0;}
java:
【20 分PAT:B1018 锤子剪刀布】import java.util.Scanner;/*** @author 余修文* @date 2018/9/19 9:43*/public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);char hand[] = new char[3];hand[0] = 'B'; hand[1] = 'C'; hand[2] = 'J';char a, b;int aHand[] = new int[3];int bHand[] = new int[3];int aWin, bWin, count, aMax = -1, bMax = -1, N;N = in.nextInt();for(int i = 0; i