加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 项目欧拉解决方案#14

发布时间:2020-12-16 00:03:05 所属栏目:百科 来源:网络整理
导读:我有以下问题(来自ProjectEuler.net – Problem 14) 为正整数集定义以下迭代序列: n - n/2 (n is even)n - 3n + 1 (n is odd) 使用上面的规则并从13开始,我们生成以下序列: 13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1 可以看出,该序列(从13开始
我有以下问题(来自ProjectEuler.net – Problem 14)

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

n -> n/2 (n is even)
n -> 3n + 1 (n is odd)

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

13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1

可以看出,该序列(从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);
   }

但是没有打印输出.

解决方法

(我不打算给你一个完整的解决方案,因为欧拉项目旨在让你思考,而不是我们已经解决了问题的人.)

尝试确定链中的值有多大,并记住limits for integral types.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读