大意:
电脑想个单词,玩家来猜。
玩家输入一个个字母,若答案里有这个字母,则显示该单词中所有该字母。
最终目标是显示答案所有字母。
猜错7次,死;
注意特殊条件:
1.玩家不断重复错误的字母,只算一次猜错。
2.如果答案是ans,读入了ansjklzxcv,这种情况算win的。虽然后面错误了7次,但游戏已经在猜出ans时提前结束了。。。
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> using namespace std; const int maxalp=26; const int maxl=100; bool unguessed[maxalp]; bool alreadygussedwrong[maxalp]; int cnt; char ans[maxl],guess[maxl]; int rnd; int la,lg; int ungcnt; bool lose=false; bool chickenedout=false; bool insguess=false; int main() { while(scanf("%d",&rnd)) { if(rnd==-1)break; memset(unguessed,false,sizeof(unguessed)); memset(alreadygussedwrong,false,sizeof(alreadygussedwrong)); memset(ans,0,sizeof(ans)); memset(guess,0,sizeof(guess)); cnt=0; lose=false; chickenedout=false; insguess=false; ungcnt=0; printf("Round %d\n",rnd); scanf("%s%s",ans,guess); la=strlen(ans); lg=strlen(guess); for(int i=0;i<la;i++) if(!unguessed[ans[i]-'a']) { unguessed[ans[i]-'a']=true; ungcnt++; } for(int i=0;i<lg;i++) { int ch=guess[i]-'a'; if(unguessed[ch]) { unguessed[ch]=false; ungcnt--; } else if(!alreadygussedwrong[ch]) { cnt++; alreadygussedwrong[ch]=true; } if(!ungcnt) { printf("You win.\n"); insguess=true; break; } if(cnt==7) { printf("You lose.\n"); lose=true; break; } } if(!lose&&!insguess) for(int i=0;i<maxalp;i++) if(unguessed[i]) { printf("You chickened out.\n"); chickenedout=true; break; } if(!lose&&!chickenedout&&!insguess) printf("You win.\n"); } return 0; }