我知道这很容易,但是我不知道该怎么做。
1 23 29 18 43 20 5
到
5 1 23 29 18 43 20
我认为我们应该使用for循环:
for (int i = 0; i < numbers.Count - 1; i++)
{
}
但是我不知道该怎么做。像数字[i] =数字[i-1]之类的东西,但是它不起作用。我认为有些错过的支票。
答案 0 :(得分:6)
想到的最直接的方法是反向循环。
int[] numbers = { 1, 23, 29, 18, 43, 20, 5};
int lastVal = numbers[numbers.Length - 1];
for (int i = numbers.Length -1; i > 0; i--)
numbers[i] = numbers[i-1];
numbers[0] = lastVal;
仅从末尾循环一次(保存完最后一个值之后),然后将这些值“向上”移动,最后将第一个值替换为最后一个
答案 1 :(得分:3)
这里是一个班轮:
var numbers = new[] {1, 23, 29, 18, 43, 20, 5};
numbers = new[] {numbers.Last()}.Concat(numbers.Take(numbers.Length - 1)).ToArray();
这将创建一个包含最后一个元素的新数组,然后将其与除最后一个元素之外的原始数组连接起来。
答案 2 :(得分:1)
您想要做的是制作另一个与原始数组大小相同的数组,然后分配最后一个元素并循环遍历该数组,直到上一个到最后一个元素。
类似这样的东西:
int[] original = {1, 23, 29, 18, 43, 20, 5};
int[] altered = new int[original.length];
altered[0] = original[original.length - 1];
for (int i = 1; i < original.length - 1; i++)
{
altered[i] = original[i - 1];
}
答案 3 :(得分:1)
您可以在案子上向左旋转桌子六个位置,并创建所需的新桌子
int[] myArray = new int[] { 1, 23, 29, 18, 43, 20, 5 };
var newArray = LeftRotationByD(myArray, 6);
,您的旋转功能将是:
private static int[] LeftRotationByD(int[] a, int k)
{
int[] b = new int[a.Length];
int index;
int length = a.Length;
int place;
for (int i = 0; i < length; i++)
{
index = i - k;
place = length + index;
if (index >= 0) b[index] = a[i];
else b[place] = a[i];
}
return b;
}
答案 4 :(得分:0)
您可以使用此方法向右移动:
void ShiftRight(int[] array, int count)
{
var clone = (int[])array.Clone();
for (var i = 0; i < array.Length; i++)
array[(i + count) % array.Length] = clone[i];
}
并以这种方式使用它:
var a = new int[] { 1, 2, 3, 4 };
ShiftRight(a, 1);