找到第n个超级难看的数字

时间:2017-07-08 18:14:04

标签: c++

此问题已存在Super Ugly Number

写一个程序来找到第n个超级难看的数字。

超级丑陋的数字是正数,其所有素数因子都在大小为k的给定素数列表素数中。例如,[1,2,4,7,8,13,14,16,19,26,28,32]是给出素数= [2,7,13,19]的前12个超丑数的序列大小为4

但是我试图在没有看到解决方案的情况下解决它,但它在某些测试用例上失败了,比如这个

45
[2,3,7,13,17,23,31,41,43,47]

任何人都可以指出错误。

int nthSuperUglyNumber(int n, vector<int>& primes) {

    int *ugly = new int[n];
    /*first number*/
    ugly[0]=1;
    int i, s=primes.size();
    /*all multiples point to start*/
    vector<int> iterators(s, 0);

    int next_ugly,j, id, t;
    for(i=1;i<n;i++){


        next_ugly=INT_MAX;
        /*find the minimum*/
        id=0;
        for(j=0;j<s;j++){

            t=ugly[iterators[j]]*primes[j];
            /*if current number is less, then it is already added*/
            if(t<=ugly[i-1]){
                iterators[j]++;
                j--; //mistake was here
            }  
            /*check for smallest*/ 
            else if(t<next_ugly){

                id=j;
                next_ugly=t;
            }
        }
        ugly[i]=next_ugly;
        cout<<ugly[i]<<" ";
        iterators[id]++;
    }
    return ugly[n-1];
}

我的输出

2 3 4 6 7 8 9 12 13 14 16 17 18 21 23 24 26 27 28 31 32 34 
36 39 41 42 43 46 47 48 49 51 52 54 56 62 63 64 68 69 72 78 82 84 

缺少81

输入

45
[2,3,7,13,17,23,31,41,43,47]

编辑:理解并纠正错误。

0 个答案:

没有答案