南邮 OJ 1167 丑陋数

丑陋数

时间限制(普通/Java) :  1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 424            测试通过 : 163 

比赛描述

“丑陋数”是指那些质因子只包含2,3或5的数(可以都不包含,所以1也是一个“丑陋数”)。数列1,2,3,4,5,6,8,9,10,12,...给出了前十个“丑陋数”。
给出正整数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]);
	}	
}







你可能感兴趣的:(ACM,丑陋数,南邮OJ)