与えられたN個の配列の中で3つの連続した整数の出現を識別し、残りの2つを削除することによって中間の値に置き換えるプログラムを作成しようとしています。 入力 - > 55 99 99 100 101 101 34 35 36 5 28 7 50 50 51 52 52 24 13 14 15 5 6 7 37 31 37 38 39 36 40 出力 - > 55 100 35 5 28 7 51 24 14 6 37 31 38 36 40再帰的ループを終了する適切な方法
これを達成するには、配列を入力として受け入れ、変更された配列を返すこのメソッドを作成しました。 Follwoing
//input
int[] original = new int[] { 1, 3, 4, 5, 5, 6, 8} ;
List<int> lstoriginal = new List<int>(original);
List<int> modified = Test(lstoriginal);
//method
public static List<int> Test(List<int> arrayInput)
{
for (i = 0; i < arrayInput.Count; i++)
{
if (i + 2 < arrayInput.Count)
{
if (arrayInput[i + 2] == arrayInput[i + 1] + 1
&& arrayInput[i + 2] == arrayInput[i] + 2)
{
arrayInput.RemoveAt(i + 2);
arrayInput.RemoveAt(i);
List<int> temp = arrayInput;
Test(temp);
}
}
}
return arrayInput;
}
iがanalyzed-実行ステップ/結果で
1-まずテスト入力は1、3、4、5、5、6、ある場合に8
2-場合i = 1であり、3,4,5が3,5を削除し、リストが1,4,5,6,8となることがわかる。
3 - 次にi = 1とすると、4,5 、6、それは4と6を削除し、新しいリストは1,5,8
です4 - i + 2 < arrayInput.Countがfalseを返し、直ちに修正された配列をここでretrunしようとすると、return文が実行されますが、結果を返す代わりにTest(temp)が呼び出されます。ステートメントを数回以上終了して終了します。お申し込みください
は、それは別のコードであるか、またはあなたはそれがそうで 'for'と一緒にいたいですか? – woliveirajr
、それは常に3つの要素しか持たないでしょうか?またはn要素でも構いません。小さい方と大きい方を除いて常に(すべての要素を)返したいと思いますか?または、常に最初と最後を除くすべてを返しますか? – woliveirajr
あなたはそれをデバッグしようとしましたか? – Snowbear