提问者:小点点

丑陋的数字-错误的答案-错误的代码[关闭]


我试图解决这个问题的极客为极客,但我的代码给出了错误的答案,对某些测试用例,我无法找出什么是错误的。 问题是-

丑数是指仅有的素因子是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];
}

请帮忙谢谢


共2个答案

匿名用户

“移除,因为我误解了算法,不删除答案,这样评论就留了下来”

我可以建议:

>

  • 编写生成素数的函数。 (最多n)

    编写一个函数来生成所有仅为2,3和5的倍数的数字。 (最多n)

    计算两个列表的笛卡尔积,剪枝大于n的值。

  • 匿名用户

    在排队

    long long int ugly[n];
    

    应该是一个警告,因为您试图在运行时声明它的大小。 查看https://www.cplusplus.com/doc/tutorial/arrays/不能在运行时创建数组