https://vjudge.net/problem/UVA-489
思路:找出串里不重复的字母数,然后从猜的串里挨个判断就行了。
int main()
{
/*UVa489
*/
int win,lose,rnd,chance,letter;
char guess[100],answer[100];
int ans[26],gus[26];
while(scanf("%d%s%s",&rnd,&answer,&guess)==3&&rnd!=-1)
{
chance=7;
win = 0;
lose = 0;
printf("Round %d\n",rnd);
memset(ans,0,sizeof(ans));
memset(gus,0,sizeof(gus));
int anslen = strlen(answer);
int guslen = strlen(guess);
letter = anslen;
for(int i=0;i<anslen;++i){
if(ans[answer[i]-'a']>0) letter--;
ans[answer[i]-'a'] ++;
}
for(int i=0;i<guslen;++i){
if(gus[guess[i]-'a']>0) {chance--;if(chance==0) {lose=1;break;}continue;}//先看猜没猜过,如果已经猜过,浪费一次机会。。WA了两次这里忘加continue
gus[guess[i]-'a']++;
if(ans[guess[i]-'a'] >0) {letter--;if(letter==0) {win = 1;break;}}//如果猜对了,都猜出来了就赢了
if(ans[guess[i]-'a'] == 0) {chance--;if(chance==0) {lose=1;break;}}//如果猜错了,机会用完就输了
}
if(win) printf("You win.\n");
else if(lose) printf("You lose.\n");
else printf("You chickened out.\n");
}
return 0;
}