51Testing软件测试论坛

标题: PAT乙级1005测试点4答案错误,如何解决?(语言-c++) [打印本页]

作者: 测试积点老人    时间: 2022-1-20 09:49
标题: PAT乙级1005测试点4答案错误,如何解决?(语言-c++)
隔离联系C++,写PAT乙级题目,PAT1005的测试点4一直答案错误
题目:
[attach]136232[/attach]
[attach]136233[/attach]
我的代码:
  1. #include <iostream>

  2. using namespace std;

  3. typedef struct
  4. {
  5.     int a;
  6.     int num[100] = {0};
  7.     bool flag;
  8. } number;

  9. int fun(int m)
  10. {
  11.     if (m % 2 == 0)
  12.     {
  13.         m = m / 2;
  14.     }
  15.     else
  16.     {
  17.         m = (3 * m + 1) / 2;
  18.     }
  19.     return m;
  20. }
  21. //交换函数,用于排序
  22. void swap(number *stu1, number *stu2)
  23. {
  24.     number stu3;
  25.     stu3 = *stu1;
  26.     *stu1 = *stu2;
  27.     *stu2 = stu3;
  28. }

  29. int main()
  30. {
  31.     //共有x个数
  32.     int x;
  33.     cin >> x;
  34.     number num[x];
  35.     int i, j, k;
  36.     int m, n = 0;
  37.     int o = 0;
  38.     //输入x个数,存在num[i].a中
  39.     for (i = 0; i < x; i++)
  40.     {
  41.         cin >> num[i].a;
  42.         num[i].flag = true;
  43.     }
  44.     //从大到小排序
  45.     for (i = 0; i < x - 1; i++)
  46.     {
  47.         for (j = i; j < x - i - 1; j++)
  48.         {
  49.             if (num[j].a < num[j + 1].a)
  50.             {
  51.                 swap(num[j], num[j + 1]);
  52.             }
  53.         }
  54.     }
  55.     //将递推得到的每个数存在num[i].num[j]数组里面
  56.     for (i = 0; i < x; i++)
  57.     {
  58.         j = 0;
  59.         m = fun(num[i].a);
  60.         while (m != 1)
  61.         {
  62.             //大于100的数不输入进num[i].num[j]数组里面
  63.             if (m < 100)
  64.             {
  65.                 num[i].num[j] = m;
  66.                 j++;
  67.             }
  68.             m = fun(m);
  69.         }
  70.     }
  71.     //三层循环用flag标记关键数
  72.     for (i = 0; i < x; i++)
  73.     {
  74.         for (j = 0; j < x; j++)
  75.         {
  76.             for (k = 0; k < 100; k++)
  77.             {
  78.                 if (num[i].a == num[j].num[k])
  79.                 {
  80.                     num[i].flag = false;
  81.                 }
  82.             }
  83.         }
  84.     }
  85.     //计算共有多少个关键数,用来判断最后一个数不用输出空格
  86.     for (i = 0; i < x; i++)
  87.     {
  88.         if (num[i].flag == true)
  89.         {
  90.             n++;
  91.         }
  92.     }
  93.     //输出结果
  94.     for (i = 0; i < x; i++)
  95.     {
  96.         while (num[i].flag)
  97.         {
  98.             cout << num[i].a;
  99.             o++; //判断是否是最后一个数字
  100.             if (o != n)
  101.             {
  102.                 cout << " ";
  103.             }
  104.             break;
  105.         }
  106.     }
  107.     return 0;
  108. }
复制代码
只有测试点4一直过不了
对(3n+1)大于100的数也进行了排除,还是报错
已经很晚了,实在不行了,代码还没来得及简化,第一次提问,求帮助QAQ

作者: qqq911    时间: 2022-1-21 10:17
C++不太懂
作者: kallinr    时间: 2022-1-21 15:25

作者: kallinr    时间: 2022-1-21 15:29
有谁知道吗




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2