UVA489 - Hangman Judge

题意:

 

 思路:

大体思路类似于今天上午写的那道题。一开始把题意搞错了,后来看了一下紫书的解析之后,原来是类似于在线处理那样,对于每一次猜想都要在线判断,如果已经猜完了并且赢了就不用再处理后面的了,如果猜的次数到了也不用处理后面的了。

注意判断的位置,是处理完之前判断还是处理完之后判断要搞清楚,不然就容易出错

代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int N = 26;
 4 bool st[N];
 5 int kase;
 6 
 7 bool is_win()
 8 {
 9     bool is_solve=true;
10         for(int i=0;i<26;i++)
11             if(st[i])
12             {
13                 is_solve=false;
14                 break;
15             }
16     return is_solve;
17 }
18 
19 int main()
20 {
21     while(scanf("%d",&kase),kase!=-1)
22     {
23         printf("Round %d\n",kase);
24         memset(st,0,sizeof st);
25         string a,b;
26         int wa_cnt=0;
27         int win,lost;
28         win=lost=0;
29         cin>>a>>b;
30         for(int i=0;i<a.size();i++)
31         {
32             st[a[i]-'a']=true;
33         }
34         for(int i=0;i<b.size();i++)
35         {        
36             if(st[b[i]-'a']==false)
37             {
38                 wa_cnt++;
39             }
40             else st[b[i]-'a']=false;
41             if(wa_cnt>=7)
42             {
43                 lost=1;
44                 break;
45             }
46             if(is_win())
47             {
48                 win=1;
49                 break;    
50             }
51         }
52         if(lost)puts("You lose.");
53         else if(win)puts("You win.");
54         else puts("You chickened out.");
55     }
56     return 0;
57 }

 

posted @ 2021-05-14 14:59  Kaoru1120  阅读(44)  评论(0)    收藏  举报