51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1246|回复: 3
打印 上一主题 下一主题

PAT乙级1005测试点4答案错误,如何解决?(语言-c++)

[复制链接]
  • TA的每日心情
    无聊
    4 天前
  • 签到天数: 530 天

    连续签到: 2 天

    [LV.9]测试副司令

    跳转到指定楼层
    #
    发表于 2022-1-20 09:49:00 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
    1测试积点
    隔离联系C++,写PAT乙级题目,PAT1005的测试点4一直答案错误
    题目:


    我的代码:
    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

    附件: 您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    6 小时前
  • 签到天数: 669 天

    连续签到: 1 天

    [LV.9]测试副司令

    3#
    发表于 2022-1-21 15:29:44 | 只看该作者
    有谁知道吗
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    6 小时前
  • 签到天数: 669 天

    连续签到: 1 天

    [LV.9]测试副司令

    2#
    发表于 2022-1-21 15:25:56 | 只看该作者
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    5 小时前
  • 签到天数: 1522 天

    连续签到: 1 天

    [LV.Master]测试大本营

    1#
    发表于 2022-1-21 10:17:24 | 只看该作者
    C++不太懂
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-25 15:46 , Processed in 0.068698 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表