UVa489 - Hangman Judge 题解
题目
题目链接
题目大意
给1个单词,然后让猜测其中的字符。只要猜测其中存在的字符就好。共有7次猜测机会。
请你写一个裁判程序,判断猜测是否成功。
输入
输入由多个测试情况组成。
每个测试情况的第一行输入第x个测试情况。第二行为正确答案,第三行为猜测。
当x=-1时表示输入结束
输出
每行输出对应一个测试情况。
如果猜测正确则输出"You win."
如果猜测失败则输出"You lose."
如果放弃猜测则输出"You chickened out."
样例输入
1
cheese
chese
2
cheese
abcdefg
3
cheese
abcdefgij
-1
样例输出
Round 1
You win.
Round 2
You chickened out.
Round 3
You lose.
题解
对于猜测序列,逐个判断字符就好了。关键是如何判断这个字符为重复出现的?
只需要让答案序列里猜测过的字符变为空格就ok。
Then show the code.
#include <stdio.h>
#include <string.h>
char s1[256], s2[256];
//left 还需要猜测几个字符就成功
//chance 剩余猜测次数
int win, lose, left, chance;
void guess(char ch){
int bad = 1;
int len = strlen(s1);
for(int i=0; i<len; i++)
if(ch == s1[i]){
left--; bad = 0;
s1[i] = ' ';
}
if(bad) chance--;
if(!left) win = 1;
if(!chance) lose = 1;
}
int main(){
int rnd;
while(scanf("%d", &rnd) == 1 && rnd != -1){
scanf("%s%s", s1, s2);
printf("Round %d\n", rnd);
win = lose = 0;
left = strlen(s1);
chance = 7;
int len = strlen(s2);
for(int i=0; i<len; i++){
guess(s2[i]);
if(win || lose) break;
}
if(win) printf("You win.\n");
else if(lose) printf("You lose.\n");
else printf("You chickened out.\n");
}
return 0;
}
不忘初心方得始终