本题不难,但是我花了一个学期才AC(= =)。找到原因后想狠狠地揍自己一顿。原来是输出的一个单词拼错了,一直在解题思路和细节上找问题的我还曾吐槽这是什么脑残游戏= =
以后需细心。
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int maxn=100;
char word[maxn];
char guess[maxn];
int main(){
int turn;
while(scanf("%d",&turn)==1&&turn!=-1){
memset(word,0,sizeof(word)); //全部清零
memset(guess,0,sizeof(guess));
scanf("%s",word);
scanf("%s",guess);
int lenw=strlen(word); //获取单词长度
int leng=strlen(guess);
int life=7;
int win=0,lost=0;
for(int i=0;i<leng;i++){ //在记录玩家猜的字符组串中遍历
bool t=1; //记录在目标单词中是否能找到该字母
for(int j=0;j<lenw;j++){ //遍历单词,找字母
if(guess[i]==word[j]){
t=0;
word[j]=' ';
}
}
if(t) { //在单词中找不到该字母
life--;
if(!life) {
lost=1;
break;
}
}
else{ //在单词中找到了该字母
int k=0;
for(;k<lenw;k++) if(word[k]!=' ')break;
if(k==lenw){ //之前写的是k==lenw-1,但是如果全部变为‘0’时,最后一次并不会break跳出来,还会执行一次k++
win=1;
break;
}
}
}
printf("Round %d\n",turn);
if(win) printf("You win.\n");
else if(lost) printf("You lose.\n");//就是lose写成了lost!!!
else printf("You chickened out.\n");
}
return 0;
}