C# - for 循环以奇怪的间隔冻结

2023-12-14

我正在研究问题14在 Project Euler 上,我的代码似乎会以随机的间隔冻结,没有明显的原因。

static void Main()
{
    int maxNum = 0;
    int maxLength = 0;
    for (int x = 2; x < 1000000; ++x)
    {
        int num = x;
        int length = 0;
        while (num != 1)
        {
            if (num % 2 == 0)
            {
                num /= 2;
                length++;
            }
            else
            {
                num = (3 * num) + 1;
                length++;
            }
       }
       if (length > maxLength)
       {
            maxLength = length;
            maxNum = x;
       }
    }
    Console.WriteLine(maxNum);
    Console.ReadLine();

每次运行程序时,程序挂起的数字都是不同的,并且似乎不遵循任何设定的模式。关于为什么它会像这样悬挂有任何想法吗?提前致谢。


我用另一种方式解决了这个问题,通过缓存每个步骤的结果,我发现了你的问题。我怀疑你的程序永远不会停止。
该声明num = (3 * num) + 1可能会溢出Int32.MaxValue并导致负数和无限循环(?)。
在这种情况下,您可以使用以下方法解决问题long为了你的x。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# - for 循环以奇怪的间隔冻结 的相关文章

随机推荐