`
zhou_zhihao
  • 浏览: 55722 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

问题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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics