[英]I was performing array rotation but getting incorrect output. anyone can tell me what is wrong with the code below?
這里有各種各樣的問題
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.