蓝桥杯练习题(幸运数改)

博客讨论了一种寻找由3,5,7因子构成的数列中第n个数字的方法。通过利用 Treeset 的去重和排序功能,作者构建了一个队列并不断乘以3,5,7来生成新的数字。虽然原程序存在可能漏掉正确顺序的问题,但通过设置循环条件为 n+1000,可以确保找到第2000个数字。文章邀请读者探讨如何改进算法以确保准确的n个数排序。
摘要由CSDN通过智能技术生成

题目描述
有一队数列有2000个数字,其中的数字只含有因子:3,5,7。
第1个数字是:3
第2个数字是:5
第3个数字是:7
第4个数字是:9
第5个数字是:15
第10个数字是:45
请你设计程序查找这个数列中的第几个数字是多少。

思路解析
本体用枚举法数据规模比较大,所以换一种思路
第一个数字是3
第二个数字是5
第三个数字是7
3x3=9
3x5
3x7
5x5
5x7
7x7

9x3
9x5

可以看出用队列的每个元素乘3,5,7获得队列的下一个值
将这个队列加入数组,需要两个操作,去重和排序
这时我们用treeset存放元素即可完成去重和排序

上代码

public class test16 {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int n = sc.nextInt();
		
		int arr[] = {3,5,7};
		long first=1;
		TreeSet<Long> tree=new TreeSet<Long>();
		while(tree.size()<n+1000) {
			for (int i = 0; i < arr.length; i++) {
				long x=arr[i]*first;
				tree.add(x);
								
			}
			
			first=tree.higher(first);//highter方法取得集合中略大于first的元素
		}
		for (int i = 0; i < n-1; i++) {
			tree.pollFirst();//去除前n-1个元素,输出第n个元素
		}
		System.out.println(tree.first());
		
	}
}

但本程序任然存在一些问题:在存放完第n个元素之后我们并不能确定这是第n个元素

例如:存放完7x7之后,存放3x9,而3x9是需要存放在7x7之前的,也就是说,后存放的元素可能是排在较前的元素

所以我在while循环中写的是,<n+1000,这个循环量已经能满足第2000个数的不漏排序.

如何完成指定n个数不漏排序欢迎在评论区探讨!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值