51Testing软件测试论坛
标题:
PAT乙级1005测试点4答案错误,如何解决?(语言-c++)
[打印本页]
作者:
测试积点老人
时间:
2022-1-20 09:49
标题:
PAT乙级1005测试点4答案错误,如何解决?(语言-c++)
隔离联系C++,写PAT乙级题目,PAT1005的测试点4一直答案错误
题目:
[attach]136232[/attach]
[attach]136233[/attach]
我的代码:
#include <iostream>
using namespace std;
typedef struct
{
int a;
int num[100] = {0};
bool flag;
} number;
int fun(int m)
{
if (m % 2 == 0)
{
m = m / 2;
}
else
{
m = (3 * m + 1) / 2;
}
return m;
}
//交换函数,用于排序
void swap(number *stu1, number *stu2)
{
number stu3;
stu3 = *stu1;
*stu1 = *stu2;
*stu2 = stu3;
}
int main()
{
//共有x个数
int x;
cin >> x;
number num[x];
int i, j, k;
int m, n = 0;
int o = 0;
//输入x个数,存在num[i].a中
for (i = 0; i < x; i++)
{
cin >> num[i].a;
num[i].flag = true;
}
//从大到小排序
for (i = 0; i < x - 1; i++)
{
for (j = i; j < x - i - 1; j++)
{
if (num[j].a < num[j + 1].a)
{
swap(num[j], num[j + 1]);
}
}
}
//将递推得到的每个数存在num[i].num[j]数组里面
for (i = 0; i < x; i++)
{
j = 0;
m = fun(num[i].a);
while (m != 1)
{
//大于100的数不输入进num[i].num[j]数组里面
if (m < 100)
{
num[i].num[j] = m;
j++;
}
m = fun(m);
}
}
//三层循环用flag标记关键数
for (i = 0; i < x; i++)
{
for (j = 0; j < x; j++)
{
for (k = 0; k < 100; k++)
{
if (num[i].a == num[j].num[k])
{
num[i].flag = false;
}
}
}
}
//计算共有多少个关键数,用来判断最后一个数不用输出空格
for (i = 0; i < x; i++)
{
if (num[i].flag == true)
{
n++;
}
}
//输出结果
for (i = 0; i < x; i++)
{
while (num[i].flag)
{
cout << num[i].a;
o++; //判断是否是最后一个数字
if (o != n)
{
cout << " ";
}
break;
}
}
return 0;
}
复制代码
只有测试点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