问题14-找到最长的一个数列当开始的数小于1000000.

问题具体描述如下:

数列定义是这样的:

n:n/2(n是偶数的时候)

n:3n+1(n是奇数的时候)

当开始的数是13时,数列如下所示

13->40->20->10->5->16->8->4->2->1

所以从13开始的数列长度为10。所有的数列都结束于1。

求开始数在1000000以下的数列长度最长的开始数。

 

代码如下:

/**
	 * n n/2 (n 是偶数) n 3n + 1 (n 是奇数)
	 * 
	 * @param n
	 * @return
	 */
	private static Long getNumber(int n) {
		Long max =0L;
		Long maxValue = 0L;
		for(Long number=1L;number<n;number++){
			Long temp = number;
			Long i = 0L;
			while (true) {
				if (temp == 1) {
					break;
				} else if (temp % 2 != 0) {
					temp = temp * 3 + 1;
				} else {
					temp = temp / 2;
				}
				i++;
			}
			if(max < i){
				max = i;
				maxValue = number;
			}
		}
		return maxValue;
	}

  可以得到答案:837799。

运行的有点缓慢。

 

请不吝赐教。

@anthor ClumsyBirdZ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值