当前位置:   article > 正文

C++版浙大PAT乙级1089(20分)_说谎者的数量c++

说谎者的数量c++

https://pintia.cn/problem-sets/994805260223102976/problems/1038429385296453632

没理解题意,导致做了很久。

这题的意思是n个人说话,其中有两个说了慌,一个是狼人,一个是好人。然后要你找出编号最小的两个狼人。

解题思路就是两个嵌套循环,分别确定两个狼人,再来次循环,统计当前情况下的狼人和好人的说谎人个数。

当说谎人个数都是1时,符合条件,输出编号,结束程序。

一直都没有就No solution。

  1. #include<iostream>
  2. #include<math.h>
  3. using namespace std;
  4. int main() {
  5. int n, num1, num2;
  6. cin >> n;
  7. int num[n+1], arr[n+1];
  8. for(int i=1; i<=n; i++){
  9. cin >> num[i];
  10. arr[i] = abs(num[i]);// arr对应每个人说了谁
  11. }
  12. // 选一个狼人
  13. for(int i=1; i<=n; i++){
  14. // 选另一个狼人
  15. for(int j=i+1; j<=n; j++){
  16. // 狼人、好人中说慌人的个数
  17. num1=0, num2=0;
  18. for(int k=1; k<=n; k++){
  19. if(k==i || k==j){// 狼人说了谎话
  20. if((arr[k]==i || arr[k]==j) && num[k]>0
  21. || arr[k]!=i && arr[k]!=j && num[k]<0){
  22. num1++;
  23. }
  24. }else{// 好人说了谎话
  25. if((arr[k]==i || arr[k]==j) && num[k]>0
  26. || arr[k]!=i && arr[k]!=j && num[k]<0){
  27. num2++;
  28. }
  29. }
  30. }
  31. if(num1 == 1 && num2 == 1){
  32. cout << i << " " << j << endl;
  33. return 0;
  34. }
  35. }
  36. }
  37. cout << "No Solution" << endl;
  38. return 0;
  39. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/519102?site
推荐阅读
相关标签
  

闽ICP备14008679号