大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:
现要求你编写一个稳赢不输的程序,根据对方的出招,给出对应的赢招。但是!为了不让对方输得太惨,你需要每隔K次就让一个平局。
输入格式:
输入首先在第一行给出正整数K(≤10),即平局间隔的次数。随后每行给出对方的一次出招:ChuiZi
代表“锤子”、JianDao
代表“剪刀”、Bu
代表“布”。End
代表输入结束,这一行不要作为出招处理。
输出格式:
对每一个输入的出招,按要求输出稳赢或平局的招式。每招占一行。
输入样例:
2
ChuiZi
JianDao
Bu
JianDao
Bu
ChuiZi
ChuiZi
End
输出样例:
Bu
ChuiZi
Bu
ChuiZi
JianDao
ChuiZi
Bu
程序源码:
#include <stdio.h> // 引入C语言标准输入输出库
#include <string.h> // 引入C语言字符串处理库 int main() { // main函数的定义,C语言程序的入口 int K, count = 0, i, count2 = 0; // 定义并初始化整数变量K、count和count2,其中count和count2初始值为0 char opponent_move[10001][9]; // 定义一个字符数组opponent_move,可以存储10001个长度为9的字符串 // 通过scanf函数从标准输入读取一个整数并存储在K中 scanf("%d", &K); // 通过gets函数从标准输入读取一行字符串并存储在opponent_move数组的第一个元素中 gets(opponent_move[0]); // 这是一个无限循环,用于读取对方的出招,直到输入"End"为止 while (1) { // 通过gets函数从标准输入读取一行字符串并存储在opponent_move数组的下一个元素中,同时将count2自增1 gets(opponent_move[count2++]); // 如果最新读取的字符串是"End",则跳出循环 if (strcmp(opponent_move[count2 - 1], "End") == 0) { break; } } // 这个循环用于根据自己和对方的出招来决定下一步的行动 for (int i = 0; i < count2 - 1; i++) { // 如果计数器count超过K,则将count重置为0并且打印opponent_move[i](即对方的出招) if (++count > K) { count = 0; printf("%s\n", opponent_move[i]); } // 如果还没到K次,则根据自己和对方的出招来决定下一步的行动 else { // 如果对方的出招是"ChuiZi",则自己的出招是"Bu" if (strcmp(opponent_move[i], "ChuiZi") == 0) printf("Bu\n"); // 如果对方的出招是"Bu",则自己的出招是"JianDao" else if (strcmp(opponent_move[i], "Bu") == 0) printf("JianDao\n"); // 如果对方的出招是"JianDao",则自己的出招是"ChuiZi" else if (strcmp(opponent_move[i], "JianDao") == 0) printf("ChuiZi\n"); } } return 0; // main函数返回0,表示程序正常结束
}