我正在执行阵列旋转但得到不正确的输出。谁能告诉我下面的代码有什么问题?

Ram*_*rma -2 c++ arrays

 #include<iostream>
 using namespace std;
 int main(){
     int n,i;
     cin >> n; 
     int arr[n];
     for (i = 0; i < n;i++)
         cin >> arr[i];

     int temp = arr[n - 1];
     for (i = 0; i < n - 1;i++){
         arr[i + 1] = arr[i];

     }
     for (i = 0; i < n;i++)
         cout << arr[i];

         return 0;
 }
Run Code Online (Sandbox Code Playgroud)

上面是我的代码,我想知道这个旋转逻辑有什么问题。上面代码的输出在这里在此处输入图片说明

cig*_*ien 7

这里有各种各样的问题

int n;
cin >> n;
int arr[n];
Run Code Online (Sandbox Code Playgroud)

这是不允许的。你不能有一个动态大小的数组。您应该改用向量。

在这段代码中

int temp = arr[n - 1];
for (i = 0; i < n - 1; i++)
   arr[i + 1] = arr[i];
Run Code Online (Sandbox Code Playgroud)

您正在增加索引 i,但修改前一个数组元素。这实际上将第一个元素复制到数组的其余部分。(另外,更喜欢循环变量的预增量)。

此外,您没有将 temp 写入第一个位置。

最好使用旋转

std::rotate(a, a + n - 1, a + n);
Run Code Online (Sandbox Code Playgroud)

如果您绝对必须自己编写循环,那么您需要以相反的顺序进行迭代

int temp = arr[n - 1];
for (i = n - 1; i > 0 ; --i)
   arr[i] = arr[i - 1];
arr[0] = temp;
Run Code Online (Sandbox Code Playgroud)