算法题--第几个幸运数

29 篇文章 0 订阅

到x星球旅行的游客都被发给一个整数,作为游客编号。
x星的国王有个怪癖,他只喜欢数字3,5和7。
国王规定,游客的编号如果只含有因子:3,5,7,就可以获得一份奖品。

我们来看前10个幸运数字是:
3 5 7 9 15 21 25 27 35 45
因而第11个幸运数字是:49

小明领到了一个幸运数字 59084709587505,他去领奖的时候,人家要求他准确地说出这是第几个幸运数字,否则领不到奖品。

请你帮小明计算一下,59084709587505是第几个幸运数字。

解题思路:

因为Java不支持数组元素的动态添加与删除,所以我这里使用集合来保存元素。我的解法比较规规矩矩,可能显得比较笨拙,但是是最容易理解的。我先往集合里加入3,5,7三个元素,然后对这几个元素分别乘以3,5,7,只要比7大便结束循环,然后把最小的数再加入到集合中,再重复以上操作,直到出现 59084709587505 。需要注意一点,这里数值比较大,我采用的是long类型。

代码示例:

import java.util.ArrayList;
import java.util.List;

public class Main {

	public static void main(String[] args) {

		long n = 59084709587505l;

		// 用集合来保存数据
		List<Long> list = new ArrayList();
		list.add((long) 3);
		list.add((long) 5);
		list.add((long) 7);

		for (int i = 4; i < 2000; i++) {
			long min = 0;
			long n1 = 0;
			long n2 = 0;
			long n3 = 0;

			// 集合里最后一个元素
			Long last = list.get(list.size() - 1);

			// 对集合里的数据进行遍历,分别乘以3,5,7,只要比最后一个元素大就结束循环
			// 取出三个数中最小的数,并添加到集合中
			for (int j = 0; j < list.size(); j++) {
				n1 = list.get(j) * 3;
				if (n1 > last)
					break;
			}

			for (int k = 0; k < list.size(); k++) {
				n2 = list.get(k) * 5;
				if (n2 > last)
					break;
			}

			for (int z = 0; z < list.size(); z++) {
				n3 = list.get(z) * 7;
				if (n3 > last)
					break;
			}

			if (n1 > n2)
				min = n2;
			else
				min = n1;
			if (min > n3)
				min = n3;
			list.add(min);

			if (min == n)
			    System.out.println(i);
		}
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西瓜不甜柠檬不酸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值