1

そこで私は、アルゴリズムとパターン認識への入り口として、この単純な数予測アルゴリズムに取り組んでいます。2 から始まり、28 ま​​で 2 ずつ増加する線形の数字 (この場合は 14) の文字列が必要です。

プログラムは、各数値から前の数値を引いて、各数値の差を計算します。次に、すべての違いが同じであることを確認し、最後の数字に違いを追加して画面に出力します。

差が毎回 0 であると考えて、最後の数字 28 と次の数字を出力することを除けば、問題なく動作します。このような他の質問があるようですが、非線形シーケンスでそれを行う方法を尋ねており、誰も私の問題を抱えていません。

考えられることはすべて試しましたが、それでも違いを判断できません。おそらく、私が見逃しているのは本当に明らかなことです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace number_predition_with_constant
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] sequence = { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28 }; //all differ by 2. Diff = 2.
            Console.WriteLine(sequence);
            Console.WriteLine("");
            int[] differences = {};
            int legnth = sequence.Length;
            int diff = 0;  //when not given value,  some other instances not recognised 
            int j = 0;
            //find difference between each number.
            for (int i = 0; i == legnth-1; i++)
            {
                j = i + 1;
                diff = sequence[j] - sequence[i];
                differences[i] = diff;
            }
            //Print the difference between each number.
            Console.Write("Difference: ");
            Console.WriteLine(diff);
            //Check all diffs are same. If not the same, print "Error"
            for (int i = 0; i == legnth-1; i++)
            {
                if (differences[i] != differences[i+1])
                {
                    Console.WriteLine("Error");
                }
            }
            //calculate next number and print.
            Console.Write("There are: ");
            Console.Write(legnth);
            Console.WriteLine(" Numbers in the sequence");
            legnth = legnth - 1;
            int next = sequence[legnth] + diff;
            Console.Write("The next Number in the sequence is: ");
            Console.WriteLine(next);
            Console.ReadKey(); //Stop Console from closing till key pressed
            }
    }
}
4

1 に答える 1

2

私はこの行(2か所に発生する)だと思います

for (int i = 0; i == legnth-1; i++)

次のようにする必要があります。

for (int i = 0; i <= legnth-1; i++)

また、これらの行:

int[] differences = {};
int legnth = sequence.Length;

次のようにする必要があります。

int legnth = sequence.Length;
int[] differences = new int[legnth];

おそらく他にも問題があると思いますが、まずそれらを修正してください。legnthグローバルに...に変更することもできlengthます;)

out-by-one エラーも発生しているようです。

デバッガーでプログラムを実行し、全体を 1 ステップ実行します。これにより、何が問題なのかがわかり、それを修正する方法をよりよく理解できるはずです。

これは有用な演習であり、すべてのコードを修正した場合よりもはるかに有益です (たとえ誰かがそうする時間があったとしても)。

于 2013-04-11T10:29:55.383 に答える