码迷,mamicode.com
首页 > 其他好文 > 详细

【紫书】uva489·坑OJ

时间:2018-03-05 20:48:43      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:题解   不能   http   word   输出   题目   gpo   i++   tps   

题目链接: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

标签:题解   不能   http   word   输出   题目   gpo   i++   tps   

原文地址:https://www.cnblogs.com/SuuT/p/8510842.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!