7-40 稳赢
分数 15
作者 陈越
单位 浙江大学
大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:
现要求你编写一个稳赢不输的程序,根据对方的出招,给出对应的赢招。但是!为了不让对方输得太惨,你需要每隔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 n;
scanf("%d",&n);
char s[1000];
int count=0;
while(1){
scanf("%s",&s);
if(strcmp(s,"End")==0)//一定要放到最上面,不能放到下面
break;
if(count==n){
puts(s);
count=0;
continue;
}
if(strcmp(s,"ChuiZi")==0)
printf("Bu\n");
else if(strcmp(s,"JianDao")==0)
printf("ChuiZi\n");
else if(strcmp(s,"Bu")==0)
printf("JianDao\n");
count++;
}
}
代码是会写,不懂它的输入是怎么一回事
if(strcmp(s,"ChuiZi") 这里 C Z 是大写的,而输入的时候 chuizi 都是小写的。后面的JianDao Bu 都是第一个字母是大写的,输入时要注意。
大小写问题
不知道你这个问题是否已经解决, 如果还没有解决的话:这段代码是一个游戏程序,根据输入的字符串进行游戏操作并输出相应的字符串。具体来说,它是一个猜拳游戏,玩家输入一串字符串,程序根据输入的字符串进行判断并产生相应的输出。游戏规则如下:
scanf
函数获取一个整数 n
,表示每次输入一组字符串之后,需要连续输出多少次。s
的输入,直到输入的字符串为 "End"。count
已经达到了 n
,则直接输出当前输入的字符串 s
。s
的值进行判断并输出相应的字符串:s
等于 "ChuiZi",则程序输出 "Bu"。s
等于 "JianDao",则程序输出 "ChuiZi"。s
等于 "Bu",则程序输出 "JianDao"。count
增加1。在这个游戏中,每轮输入一个字符串后,程序会根据字符串的值输出一个对应的字符串。如果某次输入的字符串为 "End",则程序会结束游戏。每次输入的字符串,如果计数器 count
属于索引 n
的倍数,那么输入的字符串将会被直接输出,否则根据规则进行猜拳操作并输出结果。
这是因为在代码中判断字符串的时候,使用的是 strcmp
函数,它是区分大小写的,而你输入的是 "chuizi",而正确的比较应该是 "ChuiZi",这导致程序无法匹配到相应的输出语句,所以直接结束了。你需要确保输入的字符串大小写与代码中的规则完全匹配。将 "chuizi" 改为 "ChuiZi" 即可获得正确的输出。
以下是修正后的代码,已经解决了问题:
#include <stdio.h>
#include <string.h>
int main() {
int n;
scanf("%d", &n);
char s[1000];
int count = 0;
while(1) {
scanf("%s", s);
if(strcmp(s, "End") == 0)
break;
if(count == n) {
puts(s);
count = 0;
continue;
}
if(strcmp(s, "ChuiZi") == 0)
printf("Bu\n");
else if(strcmp(s, "JianDao") == 0)
printf("ChuiZi\n");
else if(strcmp(s, "Bu") == 0)
printf("JianDao\n");
count++;
}
}
代码优化建议: - 在使用 scanf
函数获取字符串输入时,不需要使用 &
运算符,因为字符串是一个字符数组,它自己就是一个指针,已经足够传递给 scanf
函数。 - 对于字符串的比较,可以考虑使用 switch
语句或者使用 if-else if-else
语句的嵌套,可以提高代码的可读性和可维护性。例如:
if (strcmp(s, "ChuiZi") == 0) {
printf("Bu\n");
} else if (strcmp(s, "JianDao") == 0) {
printf("ChuiZi\n");
} else if (strcmp(s, "Bu") == 0) {
printf("JianDao\n");
}
这样可以使代码更加简洁明了,易于理解和修改。