题目1214:丑数

题目1214:丑数

时间限制:1 秒

内存限制:32 兆

特殊判题:


题目描述:

把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。
习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。

输入:

输入包括一个整数N(1<=N<=1500)。

输出:

可能有多组测试数据,对于每组数据,
输出第N个丑数。

样例输入:
3
样例输出:
3

import java.io.BufferedInputStream;
import java.io.PrintWriter;
import java.util.Queue;
import java.util.Scanner;


public class Main {
	   
	   public static void main(String[] args){
		    
		      Scanner cin = new Scanner(new BufferedInputStream(System.in)) ;
		      PrintWriter cout = new PrintWriter(System.out) ; 
		      
		  
		      Task task = new Task() ;
		      while(cin.hasNext()){
		    	  cout.println( task.solve(cin.nextInt()) )  ;
		    	  //cout.flush() ;
		      }
		      
			  cout.flush() ; 
	   }
	  
}


class  Task{
	   
	   long[] ugly = new long[1501] ;
	   
	   public Task() {
		      Queue<E> q = new java.util.PriorityQueue<E>() ;
		      q.add(new E(1 , 3) ) ;
		      for(int i = 1 ; i <= 1500 ; i++){
		    	    E e = q.poll() ;
		    	    switch(e.factor){
		    	        case 3 : q.add(new E(e.weight*2 , 3)) ;
		    	        case 2 : q.add(new E(e.weight*3 , 2)) ;
		    	        case 1 : q.add(new E(e.weight*5 , 1)) ;
		    	    }
		    	    ugly[i] = e.weight ;
		      }
	   }
	   
	   static class E implements Comparable<E>{
		      long  weight ;
		      int  factor ;
		      E(long weight , int factor){
		    	     this.weight = weight ;
		    	     this.factor = factor ;
		      }
			  @Override
			  public int compareTo(E o) {
					return  Double.compare(weight , o.weight) ;
			  }
	   }
	
	   long   solve(int n){
		     return ugly[n] ;     
	   }
	   
	   
}


你可能感兴趣的:(题目1214:丑数)