我正在尝试创建一个C#函数来左旋旋转数组元素并将其存储在另一个数组中。
inputl =必须存储旋转数组的数组
inputr =要旋转的数组
shift =班次数。
即使我将shift的值作为任何值传递,旋转也只发生一次。请帮忙。
public static void LeftShift(int[] inputl,int[] inputr, int shift)
{
for (int j = 0; j < shift; j++)
{
int temp = inputr[0];
var last = inputr.Length - 1;
for (int i = 0; i < last; i++)
{
inputl[i] = inputr[i+1];
}
inputl[last] = temp;
}
}
}
答案 0 :(得分:3)
以下是我解决问题的方法:
public static void shift(int[]al, int[]ar,int shift)
{
shift=ar.Length-shift%ar.Length;
for (int i = 0; i < ar.Length; i++)
al[(i+shift)%al.Length]=ar[i];
}
如果删除shift方法中的第一行,则输出将是右移
答案 1 :(得分:0)
希望我能理解你的问题,这就是你想要的
public static void shift(int[]al, int[]ar,int shift)
{
int ind=0;
for (int i = shift; i < ar.Length; i++)
{
al[ind] = ar[i];
ind++;
}
for (int i = 0; i < shift; i++)
{
al[ind] = ar[i];
ind++;
}
}
答案 2 :(得分:0)
我使用下面的代码解决了上面的程序。
public static List<int> rotateLeft(int d, List<int> arr) {
int n = arr.Count;
List<int> t = new List<int>();
int h = d;
for (int j = 0; j < n; j++)
{
if ((j + d) % n == 0)
{
h = 0;
}
t.Add(arr[h]);
h++;
}
return t;
}