刽子手游戏其实是一款猜单词游戏、游戏规则是这样的:计算机想一个单词让你猜,你每次可以猜一个字母。如果单词里有那个字母,所有该字母会显示出来;
如果没有那个字母,则计算机会在一幅“刽子手”画上填一笔。这幅画一共需要7笔就能完成,因此你最多只能错6次。
注意,猜一个已经猜过的字母也算错。
在本题中,你的任务是编写一个“裁判”程序,输入单词和玩家的猜测,判断玩家赢了(Youwin.)、输了(You lose. )还是放弃了(You chickened out.)。
每组数据包含了行,第1行是游戏编号(-1 为输入结束标记),第2行是计算机想的单词,第3行是玩家的猜测。后两行保证只含小写字母。
【样例输入】
1
cheese
chese
2
cheese
abcdefg
3
cheese
abcdefgij
-1
【样例输出】
Round 1
You win.
Round 2
You chickened out.
Round 3
You lose.
【代码如下】
1 #include<iostream> 2 #include<string> 3 using namespace std; 4 string s1, s2; 5 int guessFrequency, chance;// 还需要猜guessFrequency次个位置,错chance次后就会输 6 int win, lose;//win = 1 表示赢, lose = 1 表示输 7 8 void guess(char ch) { 9 int sign = 1; //用于后面的标记 10 for (int i = 0; i < s1.length(); i++) { 11 if (s1[i] == ch) { //相等的话 12 guessFrequency--; //还需要猜的次数减一 13 s1[i] = ' '; //题目要求,猜一个猜过的也算错。我这你就把猜过的全部置为空 14 sign = 0; //标志找到了相同的字母 15 } 16 } 17 if (sign) --chance; //没有找到的情况下猜的机会减一次 18 if (!chance) lose = 1; //还能猜的机会已经用完了 19 if (!guessFrequency) win = 1; //全猜对了 20 21 } 22 23 int main() 24 { 25 int round; //用于输出次数 26 while ((cin >> round >> s1 >> s2)&& round != -1 ) {// 27 //if (round == -1) break; 28 cout << "Round " << round << endl; 29 win = lose = 0; //求解没一组数据之前记得初始化为0 30 guessFrequency = s1.length(); //left初始化为保存待猜单词的长度 31 chance = 7; //能猜错的次数 32 for (int i = 0; i < s2.length(); i++) { //对待猜单词的每个字母进行判断 33 guess(s2[i]); 34 if (win || lose)break; //退出条件 35 } 36 37 //对退出的情况进行判断 38 if (win) cout << "You win." << endl; 39 else if (lose)cout << "You lose." << endl; 40 else 41 cout << "You chickende out." << endl; 42 } 43 44 45 46 return 0; 47 }