大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:
现要求你编写一个稳赢不输的程序,根据对方的出招,给出对应的赢招。但是!为了不让对方输得太惨,你需要每隔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>
#include <stdlib.h>
typedef struct Node{
char c[9];
struct Node * next;
}Gesture;
int main()
{
int K,m;
Gesture *g, *L, *r;
char s[9];
L = (Gesture *)malloc(sizeof(Gesture));
r = L;
scanf("%d", &K);
m = K+2;
scanf("%s", s);
while (strcmp(s,"End")) {
g= (Gesture *)malloc(sizeof(Gesture));
if(m%(K+1)) {
if(!strcmp(s, "ChuiZi")) strcpy(g->c,"Bu");
else if (!strcmp(s, "Bu")) strcpy(g->c, "JianDao");
else strcpy(g->c,"ChuiZi");
}
else {
strcpy(g->c, s);
}
m++;
r->next = g;
r = g;
scanf("%s", s);
}
r->next = NULL;
Gesture *G;
G = L->next;
while (G) {
printf("%s\n", G->c);
G = G->next;
}
return 0;
}
- 因为题目中没有说明会输入多少招,所以使用了链表。
- 链表中采用尾插法。
- 个人觉得比较难的应该是间隔K次,我采用得方法是令m=K+2,然后再m%K+1。