数组元素在C#中保持旋转 - 不良输出

时间:2017-09-01 20:39:39

标签: c# .net arrays visual-studio

我正在尝试创建一个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;
        }
    }
}

3 个答案:

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