前言:内容包括四大模块:题目,代码实习,大致思路,代码解读
题目:
大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:
现要求你编写一个稳赢不输的程序,根据对方的出招,给出对应的赢招。但是!为了不让对方输得太惨,你需要每隔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>
#include<string.h>
int main()
{
int k = 0;
scanf("%d", &k);
char arr[8] = { 0 };
int count = 0;
while (~scanf("%s", arr) && strcmp(arr, "End"))
{
if (count == k)
{
printf("%s\n", arr);
count = 0;
}
else
{
if (strcmp(arr, "ChuiZi") == 0)
{
count++;
printf("Bu\n");
}
else if (strcmp(arr, "JianDao") == 0)
{
count++;
printf("ChuiZi\n");
}
else if (strcmp(arr, "Bu") == 0)
{
count++;
printf("JianDao\n");
}
}
}
return 0;
}
大致思路:
预备了解:
count:统计稳赢局的个数
arr数组:存储读取到的字符串
1. 多组输入使用while循环,循环终止条件:读取到End
2. 统计出招个数,若达到输入的k则输出读取到的字符串,同时统计的个数归0
若没有到达输入的k则输出能稳赢的字符串
代码解读:
part 1:不知次数的多组输入
while (~scanf("%s", arr) && strcmp(arr, "End"))
使用while循环多次读取字符串,并拿读取到的字符串内容和End作比较
这里使用字符串比较函数strcmp,若是比较的二者相同,则strcmp会返回0
part 2:出招
if (count == k)
{
printf("%s\n", arr);
count = 0;
}
else
{
if (strcmp(arr, "ChuiZi") == 0)
{
count++;
printf("Bu\n");
}
else if (strcmp(arr, "JianDao") == 0)
{
count++;
printf("ChuiZi\n");
}
else if (strcmp(arr, "Bu") == 0)
{
count++;
printf("JianDao\n");
}
}
打印分两种:一种是平局,需要打印和本次读取到的字符串相同的内容
一种是稳赢,需要打印能战胜当前字符串的字符串
故而我们在打印之前,需要判断当前读取到的字符串是第几个:
1.若是count==k,则说明此局需是平局,故而输出与读取到的字符串相同的字符串
2. 若是count !=k,则此局必须是稳赢局,故而输出能够战胜对方的字符串,同时统计稳赢局的个数