1. 程式人生 > 其它 >C _ PAT B1018 錘子剪刀布

C _ PAT B1018 錘子剪刀布

技術標籤:C _ PAT Basic Level

題目描述:

大家應該都會玩“錘子剪刀布”的遊戲:兩人同時給出手勢,勝負規則如圖所示:

在這裡插入圖片描述

現給出兩人的交鋒記錄,請統計雙方的勝、平、負次數,並且給出雙方分別出什麼手勢的勝算最大。

輸入格式:

輸入第 1 行給出正整數 N(≤105​ ),即雙方交鋒的次數。隨後 N 行,每行給出一次交鋒的資訊,即甲、乙雙方同時給出的的手勢。C 代表“錘子”、J 代表“剪刀”、B 代表“布”,第 1 個字母代表甲方,第 2 個代表乙方,中間有 1 個空格。

輸出格式:

輸出第 1、2 行分別給出甲、乙的勝、平、負次數,數字間以 1 個空格分隔。第 3 行給出兩個字母,分別代表甲、乙獲勝次數最多的手勢,中間有 1 個空格。如果解不唯一,則輸出按字母序最小的解。

輸入樣例:

10
C J
J B
C B
B B
B C
C C
C B
J B
B C
J J

輸出樣例:

5 3 2
2 3 5
B B

程式碼:

#include <stdio.h>

int main() {
    int n, i, j, temp, max;
    int record[2][3] = {0}, gesture[2], winGesture[2][3] = {0};
    char c;

    scanf("%d", &n);
    getchar();
    for (i = 0; i < n; i++
) { for (j = 0; j < 2; j++) { scanf("%c", &c); getchar(); switch (c) { case 'B': gesture[j] = 0; break; case 'C': gesture[j] = 1; break
; case 'J': gesture[j] = 2; break; } } temp = gesture[0] - gesture[1]; if (temp == -1 || temp == 2) { //甲勝乙負 record[0][0]++; record[1][2]++; winGesture[0][gesture[0]]++; } else if (temp == 1 || temp == -2) { //乙勝甲負 record[0][2]++; record[1][0]++; winGesture[1][gesture[1]]++; } else { //平局 record[0][1]++; record[1][1]++; } } for (i = 0; i < 2; i++) printf("%d %d %d\n", record[i][0], record[i][1], record[i][2]); for (i = 0; i < 2; i++) { max = 0; for (j = 1; j < 3; j++) if (winGesture[i][max] < winGesture[i][j]) max = j; switch (max) { case 0: printf("B"); break; case 1: printf("C"); break; case 2: printf("J"); break; } printf("%c", i ? '\n' : ' '); } return 0; }