java - 有人可以解释这个左旋转数组代码是如何工作的吗?
问题描述
我正在尝试了解有关数组以及如何旋转它们的更多信息。我偶然发现了一个代码,我试图弄清楚它是如何正确打印出旋转的。
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 + 4) % 5 = 5 % 5 = 0
- (2 + 4) % 5 = 6 % 5 = 1
- (3 + 4) % 5 = 7 % 5 = 2
- (4 + 4) % 5 = 8 % 5 = 3
- (5 + 4) % 5 = 9 % 5 = 4
它打印出的答案是 5 1 2 3 4,这是正确的,但根据我的计算,它应该打印出 1 2 3 4 5。我是如何得到这个的,从下面的计算中它说 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
推荐阅读
- javascript - 带有shebang的文件的next.js webpack失败:模块解析失败:意外字符'#'
- vue.js - GitHub Pages - Live 上出现意外的令牌 '<',本地上没有问题
- c++ - 代码对齐会显着影响性能
- python - 使用二进制选择器的边界优化求和函数 - GEKKO
- python - 具有更改的数据框多列提取
- postgresql - 通过在 docker compose 的 postgres 命令行上传递 archive_command 来设置 WAL 归档
- python - 尽管安装了“六”包,但无法找到适合 Requirement.parse('six>=1.9') 的发行版
- r - 无法使用 ggplot2 查看完整图表(大小问题)
- android - “RenderFlex 溢出”换行文本抖动
- vba - 通过 MS Access VBA 将选定的 Outlook 电子邮件保存为 .msg 文件