为正整数集定义了以下迭代序列:
n → n/2(n 为偶数) n → 3n + 1(n 为奇数)
使用上面的规则并从 13 开始,我们生成以下序列:
13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1 可以看出,这个序列(从 13 开始,到 1 结束)包含 10 个项。尽管尚未证明(科拉茨问题),但人们认为所有起始数字都以 1 结束。
哪个起始数字(低于 100 万)产生最长的链?
注意:一旦链启动,条款允许超过一百万。
这是任务,这是我的解决方案:
#include <iostream>
using namespace std;
int n;
int start_n;
bool n_even = false;
int sequence_length = 0;
int longest_sequence = 0;
int longest_sequence_number;
int main()
{
for (n = 2; n <= 1000000; n++)
{
start_n = n;
cout << n << endl;
do
{
sequence_length += 1;
if (n % 2 == 0)
{
n_even = true;
}
else
{
n_even = false;
}
if (n_even == true)
{
n = n / 2;
}
else
{
n = 3 * n + 1;
}
} while (n == 1);
if (sequence_length > longest_sequence)
{
longest_sequence = sequence_length;
longest_sequence_number = start_n;
sequence_length = 0;
}
else
{
sequence_length = 0;
}
}
cout << "Number with the longest sequence: " << longest_sequence_number << endl;
int end;
cin >> end;
}
我独立地测试了序列的评估和 n 的生成,并且两者都有效。但是,当我将它们放在一起时,地板循环会生成 2、5、17、53、161、485、1457、4373、13121、39365、118097、354293,并表示序列最长的数字是 2。
我的 for 循环、执行 while 循环或两者都有问题吗?