didiaodidiao

刽子手游戏其实是一款猜单词游戏、游戏规则是这样的:计算机想一个单词让你猜,你每次可以猜一个字母。如果单词里有那个字母,所有该字母会显示出来;

如果没有那个字母,则计算机会在一幅“刽子手”画上填一笔。这幅画一共需要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 }

 

分类:

技术点:

相关文章: