如果退出阵列,请从另一侧输入

时间:2016-12-07 15:33:51

标签: c# c++ math

如果我有1个,2个,3个,4个,5个,6个,7个阵列并且我处于第4个位置(5号)并且你必须将它移到右边的4个位置,我怎么能这样做呢?应该在第1位(第2位)。负数也是如此,但你向左移动。我想需要while(true)循环?

3 个答案:

答案 0 :(得分:8)

假设i是索引,n是数组的大小。 积极i所需索引= i%n 对于否定的i i%n,返回负残差,因此所需的索引为n+i%n

您可以使用

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

答案 1 :(得分:0)

您可以像这样计算索引:

var newIndex = (index + 4) % 7;

所以第四个位置变为(4 + 4)%7或1。

答案 2 :(得分:0)

使用命名函数和可跟随的代码路径更加清晰,而不是使用一个有效的voodoo

    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;
    }