Ugly Numbers
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 25826 | Accepted: 11285 |
Description
Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence
1, 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.
1, 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
题意:寻找第n位的丑数。
什么是丑数呢?丑数是只包含因子2,3,5的正整数被称为丑数
题解:按照素数筛选法,我们记录丑数,设一个数组arr arr[1]=1; arr[2]=arr[1]*2; arr[3]=arr[1]*3;
arr[4] = min(arr[2]*2,arr[1]*5) 循环下去, 方程就是 arr[i]=min(arr[x] * 2, arr[y] * 3, arr[z] * 5)循环记录就可以了
import java.util.Scanner;
public class Main {
private static int swap(int i, int j, int k) {
int x = Math.min(i, j);
int y = Math.min(x, k);
return y;
}
@SuppressWarnings("resource")
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int n = scanner.nextInt();
int prime1 = 1;
int prime2 = 1;
int prime3 = 1;
if (n == 0) {
break;
}
if (n == 1) {
System.out.println(1);
} else {
int arr[] = new int[n * 5];
arr[1] = 1;
for (int i = 2; i < arr.length; i++) {
arr[i] = swap(arr[prime1] * 2, arr[prime2] * 3, arr[prime3] * 5);
if (arr[prime1] * 2 == arr[i]) {
prime1++;
}
if (arr[prime2] * 3 == arr[i]) {
prime2++;
}
if (arr[prime3] * 5 == arr[i]) {
prime3++;
}
}
System.out.println(arr[n]);
}
}
}
}