簡體   English   中英

有人可以解釋這個左旋轉數組代碼如何工作嗎?

[英]Can someone explain how this left rotating array code works?

我正在嘗試學習有關數組以及如何旋轉數組的更多信息。 我偶然發現了一個代碼,試圖找出它如何正確打印出旋轉。

public static void main(String[] args) 
{
 Scanner sc = new Scanner (System.in);

 int n = sc.nextInt();

 int d = sc.nextInt();

 int arr [] = new int [n];

 for (int i = 0; i < n; i++)
 {
  arr [i] = sc.nextInt();
 }

  for (int i = 0; i < n; i++)
 {
  System.out.print (arr [(i + d) % n] + " ");   
 }
}

我曾嘗試自己做數學運算,以查看其工作原理,但它並沒有加起來,我不確定自己做錯了什么。 n是數組中整數的數字,d是轉數。

等式為:(i + d)%n,n = 5,d = 4,數組為{1,2,3,4,5}

  1. (1 + 4)%5 = 5%5 = 0
  2. (2 + 4)%5 = 6%5 = 1
  3. (3 + 4)%5 = 7%5 = 2
  4. (4 + 4)%5 = 8%5 = 3
  5. (5 + 4)%5 = 9%5 = 4

它打印出的答案是5 1 2 3 4,這是正確的,但是根據我的計算,它應該打印為1 2 3 45。我是如何得到的是,根據以下計算,它說1應該去索引0、2應該轉到索引1,以此類推...如果你們可以幫助解釋代碼的工作原理,將不勝感激。

這里,

for (int i = 0; i < n; i++)
 {
  System.out.print (arr [(i + d) % n] + " ");   
 }

該數組將從0開始,因為在for循環中,您將i設置為0。因此它將從0開始至4。

(0 + 4) % 5 = 4 % 5 = 5
(1 + 4) % 5 = 5 % 5 = 1
(2 + 4) % 5 = 6 % 5 = 2
(3 + 4) % 5 = 7 % 5 = 3
(4 + 4) % 5 = 8 % 5 = 4

首先,您收集內容為{1,2,3,4,5}數組,這意味着您有5個具有詳細信息的索引:

arr[0] = 1
arr[1] = 2
arr[2] = 3
arr[3] = 4
arr[4] = 5

然后,您希望將每個索引內容添加到值d然后將模數%添加到值n

您的第二次迭代有什么問題?

for (int i = 0; i < n; i++){
    System.out.print (arr [(i + d) % n] + " ");   
}

如果打印此(i + d)% n ,它將產生以下結果:

(0 + 4) % 5 = 4
(1 + 4) % 5 = 0
(2 + 4) % 5 = 1
(3 + 4) % 5 = 2
(4 + 4) % 5 = 3

因此,使用此命令:

System.out.print (arr [(i + d) % n] + " ");    

實際上,您正在打印:

arr[4]
arr[0]
arr[1]
arr[2]
arr[3]

因此,如果您想要所需的結果,請使用以下代碼通過保留數組的每個索引的值來更改第二次迭代:

for (int i = 0; i < n; i++){
    arr[i] = (arr[i] + d) % n;
    System.out.print(arr[i] + " ");
}

這將打印0 1 2 3 4

希望這可以幫助

暫無
暫無

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

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