第一次参加pat考试,结果很惨,只做了中间两道题,还有一个测试点错误,所以最终只得了不到50分。题目是甲级练习题的1148-1151。

考试时有些紧张,第一题第二题开始测试样例都运行不正确,但是调试程序考场的vs2013不能粘贴,还得一点点输上去。浪费了很多时间。

1、Werewolf - Simple Version

之前遇到这种题目较少,所以刚开始没什么思路。后来想到的方法是假设撒谎的两个人分别是i、j,然后遍历所有i、j,找出符合条件的。当时总共用了得有一个小时,但程序一直得不到正确答案,只好放弃。后来回到学校去调试程序发现问题出现在一个continue上,continue后面有一个操作需要完成但直接跳过了。但是按这个方法最后一个测试点错误。

其实这类题目问的是什么就假设什么,然后遍历所有可能性找出符合条件的就行。因此正确做法是直接假设两个狼人为i、j就行。

 1 #include <iostream>
 2 using namespace std;
 3 
 4 int a[101], N;
 5 int main()
 6 {
 7     int i, j, k, t;
 8     cin >> N;
 9     for (i = 1; i <= N; i++) cin >> a[i];
10     for (i = 1; i <= N; i++)
11     {
12         for (j = i + 1; j <= N; j++)
13         {
14             bool b[101] = {};
15             b[i] = b[j] = 1;
16             int lie1, lie2, cnt = 0;
17             for (k = 1; k <= N; k++)
18             {
19                 if (a[k] > 0 && b[a[k]] || a[k] < 0 && !b[-a[k]])
20                 {
21                     cnt++;
22                     if (cnt == 1) lie1 = k;
23                     if (cnt == 2) lie2 = k;
24                 }
25             }
26             if (cnt == 2 && b[lie1] != b[lie2])
27             {
28                 printf("%d %d", i, j);
29                 return 0;
30             }
31         }
32     }
33     printf("No Solution");
34     return 0;
35 }
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-13
  • 2022-12-23
猜你喜欢
  • 2022-01-02
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-13
  • 2022-12-23
相关资源
相似解决方案