https://pintia.cn/problem-sets/994805260223102976/problems/1038429385296453632
没理解题意,导致做了很久。
这题的意思是n个人说话,其中有两个说了慌,一个是狼人,一个是好人。然后要你找出编号最小的两个狼人。
解题思路就是两个嵌套循环,分别确定两个狼人,再来次循环,统计当前情况下的狼人和好人的说谎人个数。
当说谎人个数都是1时,符合条件,输出编号,结束程序。
一直都没有就No solution。
#include<iostream>
#include<math.h>
using namespace std;
int main() {
int n, num1, num2;
cin >> n;
int num[n+1], arr[n+1];
for(int i=1; i<=n; i++){
cin >> num[i];
arr[i] = abs(num[i]);// arr对应每个人说了谁
}
// 选一个狼人
for(int i=1; i<=n; i++){
// 选另一个狼人
for(int j=i+1; j<=n; j++){
// 狼人、好人中说慌人的个数
num1=0, num2=0;
for(int k=1; k<=n; k++){
if(k==i || k==j){// 狼人说了谎话
if((arr[k]==i || arr[k]==j) && num[k]>0
|| arr[k]!=i && arr[k]!=j && num[k]<0){
num1++;
}
}else{// 好人说了谎话
if((arr[k]==i || arr[k]==j) && num[k]>0
|| arr[k]!=i && arr[k]!=j && num[k]<0){
num2++;
}
}
}
if(num1 == 1 && num2 == 1){
cout << i << " " << j << endl;
return 0;
}
}
}
cout << "No Solution" << endl;
return 0;
}