C# 如果退出数组,则从另一侧输入
例如,如果我有1,2,3,4,5,6,7数组,我在第4个位置5,如果你必须将它移动到正确的4个位置,你应该在第1个位置2。负数也是一样,但你向左移动。我想需要whiletrue循环?假设I是索引,n是数组的大小。 对于正i,所需索引=i%n 对于负i,i%n返回负的余数,因此需要的索引是n+i%n 你可以用C# 如果退出数组,则从另一侧输入,c#,c++,math,C#,C++,Math,例如,如果我有1,2,3,4,5,6,7数组,我在第4个位置5,如果你必须将它移动到正确的4个位置,你应该在第1个位置2。负数也是一样,但你向左移动。我想需要whiletrue循环?假设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; } 您可以这样计算索引: var newIndex =
int index(int i, int n) {
return i%n < 0 ? n + (i%n) : i%n;
}
您可以这样计算索引:
var newIndex = (index + 4) % 7;
因此,第四个位置变为4+4%7或1。使用命名函数和可遵循的代码路径,而不是工作的巫毒一行程序,总是更清晰
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;
}
你能给我们提供你到目前为止尝试过的方法吗?制作一个返回索引的方法。对于像int indexint i,int n{return i%n;}这样的正数,您可以为您的容器覆盖[]操作符,并考虑@Valentin的建议。这里的目的不是给出答案代码,而是给他自己解决问题的建议。通过这种方式,提问者可以通过自己解决问题来进行稳健的学习。