Hangman Judge UVA - 489
问题
代码
// 算法竞赛入门经典习题与解答 P
// 算法竞赛入门经典第2版 P80
/*
Dreams never shine!
It's you that shine while chasing your dreams :)
JAYO!!
*/
// #include <iostream>
// using namespace std;
#include <stdio.h>
#include <string.h>
#define maxn 100
int left, chance; // 还需要猜测left个位置,错chance次后就会输
char s[maxn], s2[maxn]; // s为答案字符串,s2为玩家猜的序列
int win, lose; // win = 1, 已经赢了
void guess(char ch)
{
int bad = 1;
for (int i = 0; i < strlen(s); i++)
{
if (s[i] == ch)
{
left--;
s[i] = ' ';
bad = 0;
}
}
if (bad)
--chance;
if (!chance)
lose = 1;
if (!left)
win = 1;
}
int main()
{
int rnd;
while (scanf("%d%s%s", &rnd, s, s2) == 3 && rnd != -1)
{
printf("Round %d\n", rnd);
win = lose = 0; // 求解一组数据前要初始化
left = strlen(s);
chance = 7;
for (int i = 0; i < strlen(s2); 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;
}
总结
抄代码容易抄错的一大原因!!!!
WA VERSION
void guess(char ch) {
int bad = 1;
for(int i = 0; i < strlen(s); i++)
if(s[i] == ch) {
left--;
s[i] = ' ';
bad = 0;
if(bad) --chance;
if(!chance) lose = 1;
if(!left) win = 1;
}
}
找个错
找了半年!!!
AC VERSION
void guess(char ch) {
int bad = 1;
for(int i = 0; i < strlen(s); i++)
if(s[i] == ch) {
left--;
s[i] = ' ';
bad = 0;
}
if(bad) --chance;
if(!chance) lose = 1;
if(!left) win = 1;
}