2017-09-01 11 views
0

左に配列要素を回転して別の配列に格納するC#関数を作成しようとしています。配列要素がC#で左回転 - 望ましくない出力

シフト=シフトの数を回転させるための配列を格納する必要があり、

INPUTR =アレイを回転するINPUTL =配列。

シフトの値を任意の値として渡しても、ローテーションは1回だけ行われます。助けてください。

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

詳細を教えてください –

+1

同じ配列をシフト(* inp utr *)n回、あなたは同じ出力を得るbeacuse * inputr *は変わらない。新しい配列(* inputl *)を次の繰り返しでソース配列として使用する必要があります。/ –

+1

または、 'var inputr = new int [] {1、2、3、4、5、6}; int shift = 2; var inputl = inputr.Skip(shift).Concat(inputr.Take(shift)).ToArray(); 'ちょうど楽しみのために。 –

答えて

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

あなたがシフト内の最初の行を削除する場合方法は、出力が右シフトになります

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++; 
    } 
} 
関連する問題