题目链接:http://poj.org/problem?id=1338
题目大意:满足只能被质素2,3,5整除(如果能被质素7和其它质素整除,则不是的)的正整数称为Ugly Number,有一串从小到大排列的Ugly Numbers(1,2,3,4,5,6,8,9,10,12....),输入n,输出该串的第n个Ugly Number。
题目和代码都不难理解,只是想向大家介绍该种方法!
代码:
#include<stdio.h>
#include<string.h>
int ugly[1501];
int n,ans;
int min(int a,int b)
{
return a<b ? a : b;
}
void getugly()
{
int i;
int i2_ul=1;
int i3_ul=1;
int i5_ul=1;
ugly[1]=1;
for(i=2;i<=1500;i++)
{
ugly[i]=min(ugly[i2_ul]*2,min(ugly[i3_ul]*3,ugly[i5_ul]*5));
if(ugly[i] == ugly[i2_ul]*2 )
i2_ul++;
if(ugly[i] == ugly[i3_ul]*3 )
i3_ul++;
if(ugly[i] == ugly[i5_ul]*5 )
i5_ul++;
}
}
int main()
{
getugly();
while(scanf("%d",&n) && n!=0)
printf("%d\n",ugly[n]);
return 0;
}