import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 1. 读取产品数量 n 和 左移位数 k
int n = scanner.nextInt();
int k = scanner.nextInt();
// 创建数组存储产品编号
int[] arr = new int[n];
// 2. 读取产品编号数据
for (int i = 0; i < n; i++) {
arr[i] = scanner.nextInt();
}
// 3. 循环左移逻辑
// 创建一个新的数组 result 存放移动后的结果
int[] result = new int[n];
// 遍历原数组,计算每个元素的新位置
for (int i = 0; i < n; i++) {
// 核心公式:新位置 = (原索引 - k + n) % n
// 加上 n 是为了防止索引变成负数
result[(i - k + n) % n] = arr[i];
}
// 4. 输出移动后的序列
for (int i = 0; i < n; i++) {
System.out.print(result[i] + " ");
}
scanner.close();
}
}
1. 数组循环移位看似简单,直接交换元素容易思路混乱,借助数学公式+取模运算能把复杂逻辑简化,让程序逻辑严谨、不易出错,体会到编程与数学结合的优势。
2. 编写代码前先梳理数据位置变化规律,再动手写代码,比盲目循环试错效率更高,养成先分析、后编码的习惯。
3. 处理数组下标时,负数下标是高频易错点, +长度再取模 这个小细节,是解决环形数组问题的关键,需要多积累这类通用技巧。
4. 编程不仅是实现功能,还要注重代码规范性,比如输入流关闭、代码分层注释,良好的编码习惯能提升代码可读性与稳定性。
5. 一道基础数组题可以延伸出多种变形(右移、多次移位、原地移位等),吃透基础模板,就能轻松应对同类题型
