设计一个算法,找出只含素因子2
,3
,5
的第 n 大的数。
符合条件的数如:1, 2, 3, 4, 5, 6, 8, 9, 10, 12...
注意事项
我们可以认为1
也是一个丑数
样例
如果n = 9
, 返回 10
import java.util.Scanner;
/**
* 设计一个算法,找出只含素因子2,3,5 的第 n 大的数。
符合条件的数如:1, 2, 3, 4, 5, 6, 8, 9, 10, 12...
注意事项
我们可以认为1也是一个丑数
样例
如果n = 9, 返回 10
* @author Dell
*solution效率低,
*solution2是更好的方法
*/
public class Test5 {
public static void solution2(int n)
{
if(n<0) return;
int[] result=new int[n];
result[0]=1;
int begin=1;
int m2=0,m3=0,m5=0;
while(begin<n)
{
result[begin]=Min(result[m2]*2,result[m3]*3,result[m5]*5);
while(result[m2]*2<=result[begin])
m2++;
while(result[m3]*3<=result[begin])
m3++;
while(result[m5]*5<=result[begin])
m5++;
begin++;
}
System.out.println(result[n-1]);
}
public static int Min(int a, int b,int c)
{
int temp=a>b? b:a;
return temp>c? c:temp;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
solution(n);
}
public static void solution(int n) {
int count=1;
int k=2;
while(count<n)
{
int m=k;
while(k!=1)
{
if(k%2==0)
k=k/2;
else if(k%3==0)
k=k/3;
else if(k%5==0)
k=k/5;
else
break;
}
if(k==1)
{
count++;
}
k=++m;
}
System.out.println(--k);
}
}