【发布时间】:2016-06-30 04:51:51
【问题描述】:
在 ProjectEuler 问题 #14 中,需要找到最长的 Collatz 链,最多可达 100 万。我找到了一个不错的方法,但是,感觉就像我很愚蠢,因为我找不到使这段代码更高效的方法(代码应该只在测试后打印出解决方案1 到 100 万,但 10 分钟后未打印任何内容)。我是用错误的方式解决这个问题,还是有办法优化我现有的代码?
#include <iostream>
using namespace std;
int main()
{
int i;
int x;
int n;
int superN;
int superI;
superN = 0;
superI = 0;
for (i = 1; i <= 1000000; i++) {
x = i;
n = 1;
do {
if (x % 2 == 0) {
x = x / 2;
}
if (x % 2 == 1 && x != 1) {
x = 3 * x + 1;
}
n++;
if (n > superN) {
superN = n;
superI = i;
}
} while (x != 1);
}
cout << "The number " << superI << " ran for " << superN << " terms.";
system("pause");
return 0;
}
【问题讨论】:
-
记住您已经调查过的起点并知道其长度。从新起点开始追踪时,一旦达到您之前调查过的数字,就立即停止。
-
你确定它工作正常吗?
标签: c++ optimization collatz