POJ 1338 - Ugly Numbers - TreeSet
POJ 1338 - Ugly Numbers
描述
丑陋的数字是只有素数为2、3或5的数字
序列 : 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, ... 显示前10个丑陋的数字。按照惯例,1包括在内。
给定整数n,编写一个程序来查找并打印第n个丑陋的数字。
输入
输入的每一行都包含一个正整数n (n <= 1500)。
输入由一个n=0的行终止。
输出
对于每一行,输出第n个丑陋的数字:不要处理n=0的行。
思路:反向思维,先对数进行*2,*3,*5,将所得的数,保存到set或者pq, 自动排序,再取出,每个取出最小值
package basic_data_structure;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.TreeSet;
/**
*
* @author XA-GDD
*
** 思路:反向思维,先对数进行*2,*3,*5,将所得的数,保存到set或者pq, 自动排序,再取出,每个取出最小值
*
*/
public class B_UglyNumbers {
static int N;
static long [] uglyNumb = new long[1502];
static TreeSet<Long> set = new TreeSet<Long>();
public static void main(String[] args) throws NumberFormatException, IOException {
set.add(1L);
uglyNumb[0]=1;
getUglyNumb();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str;
while((str = br.readLine()) != null){
N = Integer.parseInt(str);
if(N==0) break;
System.out.println(uglyNumb[N]);
}
}
static void getUglyNumb() {
int numb=1;
while(numb<=1500) {
createUglyNumb(numb);
numb++;
}
}
static void createUglyNumb(int numb) {
set.add(uglyNumb[numb-1]*2);
set.add(uglyNumb[numb-1]*3);
set.add(uglyNumb[numb-1]*5);
uglyNumb[numb] = set.pollFirst();
}
}
浙公网安备 33010602011771号