省题不仔细,说是输入的数小于1500,而这个数是第1500个Ugly Numbers。。。
我以为是1500之内的。。。一直wrong。。。

思路是先算出前面的Ugly Numbers,再通过乘2,3,5算出之后的数
我原先是通过一个数组记录是否为Ugly Numbers,后来发现内存根本不足
5000里面只有143个。。ORZ

看了别人的讨论后,发现人家虽然也是差不多,但是不是全部列出,
而是算出一个放进一个。。。


#include 
< iostream >
#include 
< vector >
#include 
< string >
#include 
< math.h >
using   namespace  std;

int  r[ 1501 ];
int  Min( int  a, int  b, int  c)     // 比较大小
{
        
if(a<b)b=a;
        
if(b<c)c=b;
        
return c;
}
    
    
int  main() {
        
int a;
        
int b;
        
int c;
        
int i;
        
int j;

        r[
1]=1;r[2]=2;r[3]=3;r[4]=4;r[5]=5;
        a
=3; b=2;  c=2;  
        
for(i=6;i<=1500;i++){
            r[i]
=Min(r[a]*2,r[b]*3,r[c]*5);   //把第i个之后最小的丑数找出
            for(;r[a]*2<=r[i];a++);   //找出之后相应的最大数
            for(;r[b]*3<=r[i];b++);
            
for(;r[c]*5<=r[i];c++);
        }

        scanf(
"%d",&i);
        
while(i){
            printf(
"%d\n",r[i]);
            scanf(
"%d",&i);
        }

        
return 0;
    }