丑陋数
时间限制(普通/Java) :
1000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 424 测试通过 : 163
总提交 : 424 测试通过 : 163
比赛描述
“丑陋数”是指那些质因子只包含2,3或5的数(可以都不包含,所以1也是一个“丑陋数”)。数列1,2,3,4,5,6,8,9,10,12,...给出了前十个“丑陋数”。
给出正整数n,请输出第n个“丑陋数”。
给出正整数n,请输出第n个“丑陋数”。
输入
每行仅有一个正整数n(n<=1500),输入以“0”结尾。
输出
对于每一个输入的n,输出第n个“丑陋数”,对结尾的“n=0”不用作任何输出。
样例输入
1
2
9
0
样例输出
1
2
10
提示
题目来源
计算机学院/软件学院第二届ACM程序设计大赛
#include<stdio.h>
#define MAX_N 1501
inline long min(long a,long b){
return a<b?a:b;
}
int main(){
int n,i;
long ugly[MAX_N];
ugly[0] = 1;
long *p2=ugly,*p3=ugly,*p5=ugly;
for(i=1;i<MAX_N;++i){
ugly[i] = min(min(*p2*2,*p3*3),*p5*5);
while(*p2*2<=ugly[i]){//*p2*2>ugly[i],所以ugly[i+1]可能就是*p2*2,当然还要跟其他两个比较,取最小值
++p2;
}
while(*p3*3<=ugly[i]){
++p3;
}
while(*p5*5<=ugly[i]){
++p5;
}
}
while(scanf("%d",&n)!=EOF && n){
printf("%d\n",ugly[n-1]);
}
}