Description
Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence1, 2, 3, 4, 5, 6, 8, 9, 10, 12, ...
shows the first 10 ugly numbers. By convention, 1 is included.
Given the integer n,write a program to find and print the n'th ugly number.
Input
Each line of the input contains a postisive integer n (n <= 1500).Input is terminated by a line with n=0.
Output
For each line, output the n’th ugly number .:Don’t deal with the line with n=0.
Sample Input
1
2
9
0
Sample Output
1
2
10
#include "stdio.h"
#define LENGTH 1500+5
int ugly[LENGTH];
int getm (int a,int b,int c) {
if (a > b) {
a = b;
}
if (a > c) {
a = c;
}
return a;
}
void init () {
int x2,x3,x5,i;
x2 = x3 = x5 = 1;
ugly[1] = 1;
for (i = 2;i <= 1500;i++) {
int tmp = getm (2 * ugly[x2],3 * ugly[x3],5 * ugly[x5] );
if (tmp == 2 * ugly[x2]) {
x2++;
}
if(tmp == 3 * ugly[x3]){
x3++;
}
if(tmp == 5 * ugly[x5]) {
x5++;
}
ugly[i] = tmp;
}
}
int main () {
int i;
int n;
init ();
while (scanf ("%d",&n),n) {
printf ("%d\n",ugly[n]);
}
return 0;
}
这个题目做的时候,弄了2个小时都没有ACCEPT,最后才知道原来是:i
if (tmp == 2 * ugly[x2]) {
......
}else if (tmp == 2 * ugly[x3]) {
...
}else {
...
}
错了。应该先上面的分开来写。