有一队数列有2000个数字,其中的数字只含有因子:3,5,7。
此队列的第1个数字是:3
第2个数字是:5
第3个数字是:7
第4个数字是:9
第5个数字是:15
第10个数字是:45
请你设计程序查找这个数列中的第几个数字是多少。
输入:
10
则程序应该输出:
45
再例如,输入:
1800
则程序应该输出:
30767501953125
思路:
根据题意3 5 7 9 15 分别为前5个数
9=3*3 15=3*5 推测第6位为21=3*7 第7位为25=5*5 第8位为27=3*9 第9位为35=5*7所以推测此数列为3 5 7 依次乘以数列中的数字从小到大去重排列得来。
代码如下:
import java.util.Scanner;
import java.util.TreeSet;
public class test16 {//第几个幸运数
/*
3 5 7 9 15 21 25 27 35 45
3 5 7 33 35 37 55 39 57 3*15
所以这题应该就是3 5 7分别依次乘以数列中的数然后去重,从小到大排列
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
Object[] objs=f();
System.out.println(objs[n-1]);
sc.close();
}
private static Object[] f() {
int[] a = { 3, 5, 7 };
long tou = 1;
TreeSet<Long> set=new TreeSet<Long>();
while(true) {
if(set.size()==2100) {
break;
}
for(int j=0;j<3;j++) {
long tt=tou*a[j];
set.add(tt);
}
tou=set.higher(tou);
}
return set.toArray();
}
}