POJ 1338

来源:互联网 发布:check it 编辑:程序博客网 时间:2024/06/06 00:46

转载别人的一种解法,但是还是按自己的理解另写一种

//给出整数N,输出第N个丑陋数(仅有素因子2、3和5的整数)
//POJ 1338
//使用离线算出来,在排序,在查找。
#include<iostream>
using namespace std;


void bubbleSort(unsigned int a[],int size)
{
    int temp;
    bool flag;
    for(int i=0;i<size-1;++i)
    {
        flag=true;
        for(int j=1;j<size-i-1;++j)
        {
            if(a[j]>a[j+1])
            {
                flag=false;
                temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            }
        }
        if(flag)
          break;
    }
}




int main()
{
    unsigned int x,n=0;
    unsigned int a[1500]={0};
    unsigned int limit=1000000000;
    for(int i=1;i<limit;i*=2)
    {
        for(int j=1; i*j<limit;j*=3)
        {
            for(int k=1; i*j*k<limit;k*=5)
            {
                a[n]=i*j*k;
                ++n;
                if(1500==n)
                   break;
            }
            if(1500==n)
             break;
        }
        if(1500==n)
         break;
    }




    bubbleSort(a,1500);


   /*  for(int i=1;i<=100;++i)
    {
        cout<<a[i-1]<<" ";
        if(0==i%10)
          cout<<endl;
    }*/


    cin>>x;
    while(x)
    {
        cout<<a[x-1]<<endl;
        cin>>x;
    }
    return 0;
}