簡體   English   中英

我正在執行陣列旋轉但得到不正確的輸出。 誰能告訴我下面的代碼有什么問題?

[英]I was performing array rotation but getting incorrect output. anyone can tell me what is wrong with the code below?

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

上面是我的代碼,我想知道這個旋轉邏輯有什么問題。 上面代碼的輸出在這里在此處輸入圖片說明

這里有各種各樣的問題

int n;
cin >> n;
int arr[n];

這是不允許的。 你不能有一個動態大小的數組。 您應該改用向量。

在這段代碼中

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

您正在增加索引 i,但修改前一個數組元素。 這實際上將第一個元素復制到數組的其余部分。 (另外,更喜歡循環變量的預增量)。

此外,您沒有將 temp 寫入第一個位置。

最好使用旋轉

std::rotate(a, a + n - 1, a + n);

如果您絕對必須自己編寫循環,那么您需要以相反的順序進行迭代

int temp = arr[n - 1];
for (i = n - 1; i > 0 ; --i)
   arr[i] = arr[i - 1];
arr[0] = temp;

在您的代碼中,

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

在這里,數組值每次都設置為第一個元素的值,因此您的輸出為11111 為了進一步解釋這一點,假設您的數組是arr[3]={1,2,3} 現在,在第一次迭代時, arr[1]=arr[0]數組是 {1,1,3}。 在第二次迭代中, arr[2]=arr[1]數組為{1,1,1}。

因此這解釋了這個輸出。

解決此問題的方法是引入一個臨時數組,該數組接收移位后的數組,然后將該數組復制回原始數組。

所以,代碼會像,

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

   for(i = 0; i < n - 1;i++)
       a[i]=temp[i];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM