以下のコードがあります。100万と1のメンバーを持つリストを作成します(配列でも試しました)。デフォルトでは、すべての値が 0 です。多次元配列のように機能するはずですが、最初の「列」は 1 ~ 1.000.000 の数値でなければならないため、必須ではありません。生活を楽にするために、0 位を使用しないように 1.000.001 メンバーを作成しました。ある時点で、変数 list[n] によってアドレス指定されるこのリストのメンバーを使用する必要があり、問題を回避するために、これは n < 1.000.000 の場合にのみ発生します。0 ~ 1.000.000 のメンバーがあるので問題ないと思いますが、しばらくするとエラー コード ArgumentOutOfRangeException でプログラムがクラッシュします。ここで何が欠けていますか?
int highestCount = 0;
int highestNum = 0;
List<int> list = new List<int>();
for(int j = 0; j <= 1000001; j++)
{
list.Add(0);
}
for (int i = 2; i < 1000000; i++)
{
int count = 0;
int number = i;
do
{
if (i % 2 == 0)
{
number = number / 2;
if (number < 1000000)
{
if (list[number] != 0)
{
count += list[number];
break;
}
else
{
count++;
}
}
else { count++; };
}
else
{
number = (number * 3) + 1;
if (number < 1000000)
{
if (list[number] != 0) //program dies here
{
count += list[number];
break;
}
else
{
count++;
}
}
else { count++; };
}
} while (number > 1);
list[i] = count;
if (count > highestCount)
{
highestCount = count;
highestNum = i;
}
}
MessageBox.Show(highestNum.ToString());