首页 > 解决方案 > 有人可以解释这个左旋转数组代码是如何工作的吗?

问题描述

我正在尝试了解有关数组以及如何旋转它们的更多信息。我偶然发现了一个代码,我试图弄清楚它是如何正确打印出旋转的。

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 4 5。我是如何得到这个的,从下面的计算中它说 1 应该进入索引0, 2 应该转到索引 1,等等...如果你们能帮助解释代码是如何工作的,那将不胜感激。

标签: javaarrays

解决方案


这里,

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

推荐阅读