我试图解决这个问题的极客为极客,但我的代码给出了错误的答案,对某些测试用例,我无法找出什么是错误的。 问题是-
丑数是指仅有的素因子是2,3或5的数。 序列1,2,3,4,5,6,8,9,10,12,15,…显示了前11个难看的数字。 按照惯例,包括1。 编写一个程序来查找第n个丑陋的数字。
输入:
输入的第一行包含一个整数T,表示测试用例的数量。 测试用例如下。 对于每个测试用例,有一行输入包含数字N。
输出:
打印第n个丑陋的数字。
约束条件:
1≤T≤104
1≤N≤104
我为它写了下面的代码-
#include<bits/stdc++.h>
using namespace std;
int Nth_ugly_no(int);
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
cout<<Nth_ugly_no(n)<<"\n";
}
}
int Nth_ugly_no(int n)
{
long long int ugly[n];
long long int i2=0,i3=0,i5=0,i, next_ugly_no;
long long int next_multiple_2=2, next_multiple_3=3, next_multiple_5=5;
ugly[0]=1;
for(i=1;i<n;i++)
{
next_ugly_no=min(next_multiple_2, min(next_multiple_3, next_multiple_5));
ugly[i]=next_ugly_no;
if(next_ugly_no==next_multiple_2)
{
i2++;
next_multiple_2=2*ugly[i2];
}
if(next_ugly_no==next_multiple_3)
{
i3++;
next_multiple_3=3*ugly[i3];
}
if(next_ugly_no==next_multiple_5)
{
i5++;
next_multiple_5=5*ugly[i5];
}
}
return ugly[n-1];
}
请帮忙谢谢
“移除,因为我误解了算法,不删除答案,这样评论就留了下来”
我可以建议:
>
编写生成素数的函数。 (最多n)
编写一个函数来生成所有仅为2,3和5的倍数的数字。 (最多n)
计算两个列表的笛卡尔积,剪枝大于n的值。
在排队
long long int ugly[n];
应该是一个警告,因为您试图在运行时声明它的大小。 查看https://www.cplusplus.com/doc/tutorial/arrays/不能在运行时创建数组