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);
}