紫书uva489·坑OJ

Posted COLORFUL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了紫书uva489·坑OJ相关的知识,希望对你有一定的参考价值。

题目链接:https://vjudge.net/problem/UVA-489

题意:给出两行字符串,第一行是标准答案,第二行是玩家猜的串。玩家每次猜一个,猜对一个,标准答案中所有该字符都算被猜到。猜错的次数不能到达七次。多次因同一个字符猜错算猜错一次(这个条件没有用)。

  猜对,没猜对且错了七次,没猜对但还没错到七次

  分别输出

You win.
You lose.
You chickened out.

题解:模拟,莫名奇妙wa了一个小时。各种修改。

以至于找到了一组数据,oj检测不出来,手算明显是错的:

word
aerbmzagword

ac代码是You lose., 手算是You win.

 

其实我错的是这一行:

24 if (a[s2[i]]==1)a[s2[i]] = 0, num--;

之前写成了 a[s2[i]] = -1
这样的话如果下次再次出现之前已经猜到了的字符,会计算一次错误,然后gg(紫书写的“猜一个已经猜过的字母也算错”是错的,我敲了一遍书上的代码也是wa的)

 

(坑)

附ac代码:用了字符为下标的数组a[256]来简化,num来判断是否全部猜到,

 1 #include<string.h>
 2 #include<iostream>
 3 #include<string>
 4 
 5 using namespace std;
 6 
 7 int a[256];
 8 int main()
 9 {
10     int n;
11     int kase = 1;
12     while (cin >> n) {
13         if (n == -1)break;
14         string s1, s2;
15         cin >> s1 >> s2;
16         memset(a, -1, sizeof(a));
17         int len = s1.size(); int num = 0;
18         for (int i = 0; i < len; i++)if (a[s1[i]]==-1) {
19             a[s1[i]] = 1; num++;
20         }
21         int cnt = 0; int ok = 0;
22         len = s2.size();
23         for (int i = 0; i < len; i++) {
24             if (a[s2[i]]==1)a[s2[i]] = 0, num--;
25             //else cnt++;(替代下一行也ac)
26             if (a[s2[i]] == -1)cnt++;
27             if (cnt >= 7)break;
28             if (num == 0) {
29                  break;
30             }
31         }
32         cout << "Round ";
33         cout << n << endl;
34         if (num==0)cout << "You win." << endl;
35         else if (cnt >= 7)cout << "You lose." << endl;
36         else cout << "You chickened out." << endl;
37     }
38 
39     return 0;
40 
41 }

 

以上是关于紫书uva489·坑OJ的主要内容,如果未能解决你的问题,请参考以下文章

uva489

紫书例题6-3 (UVa 442)

刽子手游戏(UVa489)

UVa 489 HangmanJudge --- 水题

紫书Oil Deposits UVA - 572 dfs求联通块

紫书 The Falling Leaves UVA - 699 递归得简单