2016-12-07 8 views
0

1,2,3,4,5,6,7アレイがあり、4番目のポジション(番号5)にある場合、どうすればいいですか?それを右の4ポジションに移動するには、ポジション1(番号2)にする必要があります。負の数でも同じですが、あなたは左に移動します。 while(true)ループの必要があると思いますか?出口アレイの場合、反対側から入力してください

+3

はあなたがこれまでに試してみました何で私たちを提供することができます仕事の代わりにブードゥー教1ライナーの名前の機能と追従可能コードパスで常に明確? – Sefe

+1

インデックスを返すメソッドを作成します。 'int index(int i、int n){return i%n;}}のような肯定的なものについては、 } ' – Valentin

+0

コンテナの[]演算子をオーバーラップし、@ Valentinの提案を考慮に入れて –

答えて

8

は、iがインデックスであり、nが配列のサイズであると仮定します。正iii%nリターンのために必要なインデックス= i%n 負の残留については 、あなたが

int index(int i, int n) { 
    return i%n < 0 ? n + (i%n) : i%n; 
} 
0

を使用することができます必要なインデックスがn+i%n

あるので、あなたはこのようなあなたの指数を計算することができます

var newIndex = (index + 4) % 7; 

したがって、4番目の位置は(4 + 4)%7または1になります。

0

public void MyTest() 
    { 
     var testData = new[] { 1, 2, 3, 4, 5, 6, 7 }; 

     Assert.AreEqual(2, TraverseCircularArray(testData, 5, 3)); 
     Assert.AreEqual(6, TraverseCircularArray(testData, 2, -4)); 
    } 

    private int TraverseCircularArray(int[] array, int currentIndex, int interval) 
    { 
     var i = array[currentIndex]; 

     if (currentIndex + interval < 0) 
      i = array[array.Length + (interval + currentIndex)]; 
     else if (currentIndex + interval >= array.Length) 
      i = array[currentIndex - interval - 1]; 
     else 
      i = array[currentIndex + interval]; 

     return i; 
    } 
+0

ここで目的は答えのコードを与えるのではなく、彼自身の問題を解決する助けを与えることです。このようにして、質問者は自分自身で問題を解決することによって頑強に学ぶことができます。 –

関連する問題