刽子手游戏是一款猜单词游戏,计算机想一个单词让你猜,你每次可以猜一字母 如果单词里有那个字母,所有该字母会显示出来。(例如“book”,如果猜字母“o”,则两个o都会显示出来) 如果没有那个字母,则计算机会在一幅“刽子手”画上填一 笔。这幅画一共需要7 笔就能完成,因此你最多只能错6 次。
注意,猜一个已经猜过的字母也算错。在本题中,模拟这个过程,输入单词和玩家的猜测,判断结果。
输入若干组数据,每组数据包含3行,第1行是游戏编号(-1为输入结束标记),第2行是计算机想的单词,第3行是玩家的猜测。后两行保证只含小写字母。
输出每组对应两行,第一行为游戏编号,格式为“Round 局数”(无引号,中间有空格),第二行为游戏结果,如果玩家获胜,输出"You win.",如果玩家失败,输出"You lose.",如果参赛者没有猜到足够的字母就退出,输出"You chickened out."(句末有句点,无引号)
输入 #1
1 cheese chese 2 cheese abcdefg 3 cheese abcdefgij -1
输出 #1
Round 1 You win. Round 2 You chickened out. Round 3 You lose.
题目有三种输出,一种是在猜完之前,猜到了所有字母,一种是猜完后,没有猜到所有字母,也没有猜错7次,一种是猜错7次.
思路很简单,设置一个数组,记录出现了哪些字母,设置两个变量,一个用来记录猜错几次,一个用来记录出现多少字母.
#include <stdio.h> #include <string.h> int vaild[26]; int main() { int n; int right = 0; int fault = 0; int flag = 0; while (1) { scanf("%d", &n); // 结束条件 if (n == -1) { return 0; } // 注意变量也要初始化 right = 0; fault = 0; flag = 0; // 注意初始化 memset(vaild, 0, sizeof(vaild)); getchar(); char c; while ((c = getchar()) != '\n') { if (vaild[c - 'a'] == 0) { // 完成vaild和right的记录 vaild[c - 'a']++; right++; } } char t; while ((t = getchar()) != '\n') { if (vaild[t - 'a'] == 0) { fault++; } else { right--; vaild[t - 'a'] = 0; } if (right <= 0) { flag = 1; char m; /* 因为使用的是getchar,如果在还没有读取完的时候就退出循环,会影响其他的getchar函数的读取,这里把输入吸收完*/ while ((m = getchar()) != '\n'); break; } else if (fault >= 7) { flag = -1; char x; while ((x = getchar()) != '\n'); break; } } printf("Round %d\n", n); if (flag == 1) { printf("You win.\n"); } else if (flag == 0) { printf("You chickened out.\n"); } else { printf("You lose.\n"); } } return 0; }