赞
踩
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;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。