我的PAT-BASIC代码仓:https://github.com/617076674/PAT-BASIC
我的PAT-ADVANCED代码仓:https://github.com/617076674/PAT-ADVANCED
原题链接:
PAT-BASIC1089:https://pintia.cn/problem-sets/994805260223102976/problems/1038429385296453632
PAT-ADVANCED1148:https://pintia.cn/problem-sets/994805342720868352/problems/1038429808099098624
题目描述:
PAT-BASIC1089:
PAT-ADVANCED1148:
知识点:暴力破解法
思路:暴力破解,遍历所有可能的狼人组合
时间复杂度是O(N ^ 2)。空间复杂度是O(1)。
C++代码:
#include<iostream>
#include<vector>
using namespace std;
int main() {
int N;
scanf("%d", &N);
int nums[N + 1];
for(int i = 1; i < N + 1; i++) {
scanf("%d", &nums[i]);
}
int wolf1, wolf2;
for(wolf1 = 1; wolf1 <= N; wolf1++) {
for(wolf2 = wolf1 + 1; wolf2 <= N; wolf2++) {
vector<int> lie;
for(int i = 1; i < N + 1; i++) {
if(nums[i] < 0 && -nums[i] != wolf1 && -nums[i] != wolf2) {
lie.push_back(i);
} else if(nums[i] > 0 && (nums[i] == wolf1 || nums[i] == wolf2)) {
lie.push_back(i);
}
}
if(lie.size() == 2) {
if(lie[0] == wolf1 || lie[0] == wolf2) {
if(lie[1] != wolf1 && lie[1] != wolf2) {
printf("%d %d\n", wolf1, wolf2);
return 0;
}
} else if(lie[1] == wolf1 || lie[1] == wolf2) {
if(lie[0] != wolf1 && lie[0] != wolf2) {
printf("%d %d\n", wolf1, wolf2);
return 0;
}
}
}
}
}
printf("No Solution\n");
return 0;
}
C++解题报告: