我想編寫一個程序來識別在一個給定的N數組數組中的3個連續整數的出現,並通過刪除其他兩個數字來替換它們的中間值。 例如輸入→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正確的方式退出遞歸循環
爲了達到這個目的,我寫了這個方法,它接受數組作爲輸入並返回修改後的數組。
//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;
}
Follwoing是執行步驟/結果是我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 - 我期待從循環退出時,我+ 2 < arrayInput.Count返回false,並試圖立即重試修改後的數組返回語句得到執行,而不是返回結果它再次調用測試(溫度);聲明幾次,然後退出。請建議
可以說,它是另一種代碼,或者你希望它是用'for'等等? – woliveirajr
它總是隻有3個元素?或者可以是n元素,並且除了更小和更大之外,您總是希望返回(所有元素)?或者總是返回除第一個和最後一個之外的所有內容 – woliveirajr
你試過調試過嗎? – Snowbear