您的位置:首页 > 其它

1004 Problem D

2016-05-17 23:03 295 查看
1004 Problem D
题意:一个数如果它的素数因子是2、3、5、7,则这个数是丑数,给定任意一个数,输出它的丑数。(The sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18,20, 21, 24, 25, 27, ... shows the first 20 humble numbers. )

思路:由题意可以看出,以2、3、5、7为基数,从f[1]=1开始的数,依次乘以2、3、5、7,最后得到一个有小到大的数列。

感想:第i个数的值,与前i-1中的某个数有关,这里采取了一个技巧,让数列从第i-1个数开始,倒序与2、3、5、7相乘,最终得到的最小数放入数组。

#include<iostream>

using namespace std;

int n,i,j,k;

long long f[5843];

int main(){

    intprime[4]={2,3,5,7};

    f[1]=1;

   for(i=2;i<=5842;i++){

        f[i]=2000000001;

       for(j=0;j<4;j++)

       for(k=i-1;k>=1;k--){

                //如果f[i]<f[i-1],则退出循环

           if(f[k]*prime[j]<=f[i-1]) break;

           if(f[k]*prime[j]<f[i]) //从i-1开始倒序循环,保证放入数组中的满足题意的f[i]最小

               f[i]=f[k]*prime[j];

        }

    }

   while(cin>>n&&n!=0){

       if(n%10==1&&n%100!=11)

           cout<<"The "<<n<<"st humble number is"<<f
<<"."<<endl;

        elseif(n%10==2&&n%100!=12)

            cout<<"The"<<n<<"nd humble number is"<<f
<<"."<<endl;

        elseif(n%10==3&&n%100!=13)

           cout<<"The "<<n<<"rd humble number is"<<f
<<"."<<endl;

        else

           cout<<"The "<<n<<"th humble number is"<<f
<<"."<<endl;

    }

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: