不知道为什么在POJ上就是通不过编译。。。
因为数据范围并不大,所以可以离线计算出所有的丑数。
说实话这个算法是网上找的,但是没有怎么看懂。
1 #include<stdio.h> 2 #include<string.h> 3 4 5 int a[1510];//丑数数组 6 7 int min(int a,int b){//求两数的最小值 8 int x; 9 if(a<b) x=a; 10 else x=b; 11 return x; 12 } 13 14 int main(void) 15 { 16 int n,i; 17 memset(a,0,sizeof(a)); 18 int b,c,d; 19 b=c=d=1; 20 a[1]=1;//第一个丑数为1 21 for(i=2;i<=1500;i++) 22 { 23 a[i]=min(a[b]*2,min(a[c]*3,a[d]*5)); 24 if(a[i]==a[b]*2) b++; 25 if(a[i]==a[c]*3) c++; 26 if(a[i]==a[d]*5) d++; 27 } 28 printf("The 1500'th a number is %d.\n",a[1500]); 29 return 0; 30 }