L1-044 稳赢
分数 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
#include
int main()
{
int k,i,m,n=0;
char a[50][10],b[10]="End";
scanf("%d",&k);
getchar();
for(i=0;;i++)
{
gets(a[i]);
if(strcmp(a[i],b)==0)
break;
}
m=i;
int flag=1;
for(i=0;iif(n==k)
{
printf("%s\n",a[i]);
n=-1;
flag=0;
}
n++;
if(flag==1)
{
if(strcmp(a[i],"ChuiZi")==0)
printf("Bu\n");
if(strcmp(a[i],"JianDao")==0)
printf("ChuiZi\n");
if(strcmp(a[i],"Bu")==0)
printf("JianDao\n");
}
flag=1;
}
return 0;
}
参考一下,不喜勿喷
#include <stdio.h>
#include <string.h>
int main() {
int k, i, m, n = 0;
char a[50][10], b[10] = "End";
c
Copy code
scanf("%d", &k);
getchar();
for (i = 0; i < 50; i++) {
fgets(a[i], 10, stdin);
a[i][strlen(a[i]) - 1] = '\0'; // 去掉换行符
if (strcmp(a[i], b) == 0)
break;
}
m = i;
int flag = 1;
for (i = 0; i < m; i++) {
if (n == k) {
printf("%s\n", a[i]);
n = -1;
flag = 0;
}
n++;
if (flag == 1) {
if (strcmp(a[i], "ChuiZi") == 0)
printf("Bu\n");
else if (strcmp(a[i], "JianDao") == 0)
printf("ChuiZi\n");
else if (strcmp(a[i], "Bu") == 0)
printf("JianDao\n");
}
flag = 1;
}
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话: