我正在尝试解决 Project Euler Problem 14。它要求找到生成最长序列的 100 万以下的数字。我所做的是创建一个向量 v,并使用特定数字的序列长度填充其元素。因此,位于位置 13 的元素将对应于由数字 13 生成的序列的长度,依此类推。但是,一些看似随机的元素需要非常大的数字,我无法弄清楚代码有什么问题。此外,当我用 1,000,000 对其进行测试时,我得到了一个完全错误的答案,但我知道该程序在手动测试并验证后可以处理一些小数字。
#include <iostream>
#include <vector>
using namespace std;
void find_longest(int n)
{
int count = 1;
int max = 0;
int position;
vector<int> v;
v.push_back(0);
v.push_back(0);
for(int i = 1; i < n; i++)
{
long long int trainer = i;
count = 1;
while(trainer != 1)
{
if(trainer%2 == 0)
{
trainer /= 2;
count++;
}
else
{
trainer = 3*trainer + 1;
count++;
}
}
v.push_back(count);
}
vector<int>::iterator it;
for(it = v.begin(); it < v.end(); it++)
{
cout << v[*it] << endl;
//if(v[*it] > max)
//{
// max = v[*it];
// position = *it;
//}
}
//cout << "The longest sequence is " << max << " terms long and is ";
//cout << "generated by the number " << position << "." << endl;
}
int main()
{
find_longest(100);
//find_longest(1000000);
}