项目欧拉解决方案#14

Nov*_*vak 4 c#

我有以下问题(来自ProjectEuler.net - 问题14)

为正整数集定义以下迭代序列:

n -> n/2 (n is even)
n -> 3n + 1 (n is odd)
Run Code Online (Sandbox Code Playgroud)

使用上面的规则并从13开始,我们生成以下序列:

13 ? 40 ? 20 ? 10 ? 5 ? 16 ? 8 ? 4 ? 2 ? 1
Run Code Online (Sandbox Code Playgroud)

可以看出,该序列(从开始13和结束1)包含10个术语.虽然尚未证实(Collat​​z问题),但据认为所有起始数字都已完成1.

哪个起始编号低于一百万,产生最长的链?

注意:链条启动后,条款允许超过一百万.

我用了:

   static int road (int n)
   {
       int road = 0;
       while (n != 1)
       {
           if (n % 2 == 0)
               n = n / 2;
           else
               n = 3 * n + 1;
           road++;
       }
       return road;
   }
   static void Main(string[] args)
   {
       int max = 0, num = 0;
       for (int i = 1; i < 1000000; i++)
       {
           if (road(i) > max)
           {
               max = road(i);
               num = i;
           }
       }
       Console.WriteLine(num);
   }
Run Code Online (Sandbox Code Playgroud)

但是没有打印输出.

Joe*_*oey 12

(我不打算给你,因为项目欧拉的完整解决方案的目的是让想不到,没有我们谁已经解决的问题.)

尝试确定链中的值有多大,并记住整数类型限制.