using System; using System.Collections.Generic; using System.Linq; using System.Text; //输出结果:837799 //The following iterative sequence is defined for the set of positive integers: //n n/2 (n is even) //n 3n + 1 (n is odd) //Using the rule above and starting with 13, we generate the following sequence: //13 40 20 10 5 16 8 4 2 1 //It can be seen that this sequence (starting at 13 and finishing at 1) contains 10 terms. //Although it has not been proved yet (Collatz Problem), it is thought that all starting numbers finish at 1. //Which starting number, under one million, produces the longest chain? //NOTE: Once the chain starts the terms are allowed to go above one million. namespace Problem14 { class Program { static void Main(string[] args) { Console.WriteLine(GetLength(4)); Console.WriteLine(SearchNum(1000000)); } //1.一个数字算出链条的长度 #region GetLength() public static long GetLength(long x) { long length = 1; while (x != 1) { if (x % 2 == 0) { x /= 2; length++; } else { x = (3 * x + 1); length++; } } return length; } #endregion //2.寻找给定数字之类最大的开始数,使得链条长度最长 #region SearchNum() public static long SearchNum(int target) { long startnum = 2; long chainLarge = GetLength(2); for (int i = 2; i <= target; i++) { if (GetLength(i) > chainLarge) { chainLarge = GetLength(i); startnum = i; } } return startnum; } #endregion } }