C#-for循环以奇怪的间隔冻结
我正在进行Euler项目,我的代码似乎在无明显原因的情况下以随机间隔冻结C#-for循环以奇怪的间隔冻结,c#,for-loop,random,freeze,C#,For Loop,Random,Freeze,我正在进行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 %
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();
static void Main()
{
int maxNum=0;
int maxLength=0;
对于(整数x=2;x<1000000;++x)
{
int num=x;
整数长度=0;
while(num!=1)
{
如果(数值%2==0)
{
num/=2;
长度++;
}
其他的
{
num=(3*num)+1;
长度++;
}
}
如果(长度>最大长度)
{
最大长度=长度;
maxNum=x;
}
}
Console.WriteLine(maxNum);
Console.ReadLine();
每次运行程序时挂起的数字都不一样,而且似乎没有遵循任何设置模式。您知道为什么它会这样挂起吗?提前谢谢。如果在
中进入无限循环,而(num!=1)
如果在中进入无限循环,而(num!=1)如果在中进入无限循环
我用另一种方法解决了这个问题,通过缓存每个步骤的结果,我发现了您的问题。我怀疑您的程序是否会停止。
语句num=(3*num)+1
可能溢出Int32.MaxValue
并导致负数和无限循环(?。
在这种情况下,您可以通过对x使用long
来解决问题。我用另一种方法解决了问题,通过缓存每个步骤的结果,我发现了您的问题。我怀疑您的程序是否会停止。
语句num=(3*num)+1
可能溢出Int32.MaxValue
并导致负数和无限循环(?。
在这种情况下,您可以通过为x使用long
来解决问题。我打赌这个版本不会冻结,没有理由这样做
在内部while循环中点击1之前的Collatz序列太短,不会导致明显的延迟,如果它们会延迟,那么应该总是在相同的数字上发生
如果您在循环中添加控制台输出,那么这可能会分配内存,您看到的暂停可能是由于垃圾收集造成的。我打赌这个版本不会冻结,没有理由这样做
在内部while循环中点击1之前的Collatz序列太短,不会导致明显的延迟,如果它们会延迟,那么应该总是在相同的数字上发生
如果在循环中添加控制台输出,则这可能会分配内存,并且您看到的暂停可能是由于垃圾收集造成的。“冻结”然后醒来,或者它是为了?冻结,就像在一个随机数处停止,一直呆在那里,直到我结束程序。用你的话来说,它是为了。你怎么知道它是冻结的?它冻结在哪一行?“冻结”意味着它正在点击控制台。ReadLine()等待你按下一个按钮吗?不,它仍然在for循环的中间。我在循环中的各个点设置了控制台。然后醒来,或者它是为了?冻结,就像在一个随机数处停止,一直呆在那里,直到我结束程序。用你的话来说,它是为了。你怎么知道它是冻结的?它冻结在哪一行?“冻结”意味着它正在点击控制台。ReadLine()等待你按下一个按钮吗?不,它仍然在for循环的中间。我设置了控制台。它在循环中的不同点,以确保它仍然在循环,有时它会停下来,在不同的数字下静止不动,没有反应。但这就是问题所在。我不认为它会进入无限循环,因为有时它会在某个数字上卡住,而有时它不会。但这就是问题所在。我不认为它会进入无限循环进入一个无限循环,因为有时它会被固定在某个数字上,而有时不会。是的,这似乎是个问题。我将int改为long,现在效果很好。谢谢!没问题,这是一个有趣的谜题。如果你感兴趣,这是我的解决方案:是的,这似乎是个问题。我将int改为long,现在效果很好。谢谢!没问题,这是一个有趣的谜题。如果你感兴趣的话,这是我的解决方案:在这种情况下,问题是整数溢出,这在问题的范围内肯定会发生。当我用C和C重新编写我的解决方案时,我也有点犹豫。是的,我忘记了。32位整数溢出有很多循环,例如113383。尽管我在这种情况下,它应该始终挂起在这个数字上。在这种情况下,问题是整数溢出,这在该问题的范围内肯定会发生。当我用C和C重新编写解决方案时,我也有点犹豫。是的,我忘记了。对于32位整数溢出,有许多循环,例如113383。虽然在这种情况下,它应该是在这个数字上,路是悬而未决的。