ホーム>source

だから、与えられた回数の回転操作を実行しようとしています。

<前>ウィズウィズ

今、関数 #include <iostream> using namespace std; void result_arr_one_rotation (int arr [], int n){ // int one_rotate_arr[n]; int p=arr[0]; for (int i=0;i<n-1;++i){ arr[i]=arr[i+1]; } arr[n]=p; //return arr; } int main(){ //n stands for total number of elements in array and d stands for number of rotation int n,d; cin>>n>>d; int arr[n]; //to take elements of array for(int i=0;i<n;i++){ cin>>arr[i]; } //int rotated_arr[n]; for (int i=0;i<d;i++){ result_arr_one_rotation(arr,n); //cout<<arr[i]<<" "; } for (int i=0;i<n;i++){ cout<<arr[i]<<" "; } return 0; } 要素を1つのインデックスで回転します。0番目のインデックス要素を格納するには、 result_arr_one_rotation を作成しました最後に割り当てられる変数。 'arr [n] = p'行で確認できます。今、私は p で回転しましたユーザーが回転する回数を自由に使用できる回数。 さらに、要素を出力するだけです。

ここに私が次のような入力を与えたときの問題があります

<前>ウィズウィズ

誰か私にここで間違ったことを教えてください?

d
あなたの答え
  • 解決した方法 # 1

    このループで使用する最後のインデックス

    <前>ウィズウィズ

    ウィズウィズです 。配列の有効なインデックスは0からsize-1までです。ここに

    <前>ウィズウィズ

    範囲外の配列にアクセスした。最後の要素に割り当てたい場合、それは for (int i=0;i<n-1;++i){ arr[i]=arr[i+1]; } になります

    n-2 を使用したくない場合  これは演習なので、 arr[n]=p; を使用することをお勧めします 、なぜなら標準C ++ではない可変長配列を使用しているからです。実際にはC ++でVLAは必要ありません。これは arr[n-1] = p; があるためです。 。これらはCのものであり、gccはC ++でも非標準の拡張機能として提供しています。

    std::rotate

関連記事

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ javascript - forEachループ内のオブジェクトプロパティの変更