-1

以下のコードがあります。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());
4

1 に答える 1