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(); } }
标签:set,java,new,Ugly,static,import,POJ,TreeSet 来源: https://www.cnblogs.com/smile_to_warm/p/15216161.html