输入样例:
第一行输入数组整数个数n(1≤n≤100): 6
循环右移m个位置(m≥0): 2
第二行输入数组a: 1 2 3 4 5 6
输出样例:
输出循环右移m位整数序列: 5 6 1 2 3 4(最后一个数后无空格)
import java.util.Scanner;
public class Main {
public static void reverse(int[] a, int start, int end) {
while (start < end) {
int temp = a[start];
a[start] = a[end];
a[end] = temp;
start++;
end--;
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 输入数组整数个数n和循环右移m个位置
int n = scanner.nextInt();
int m = scanner.nextInt();
// 创建数组并读取输入元素
int[] a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = scanner.nextInt();
}
m %= n; // 计算循环右移后的实际位移
reverse(a, 0, n - 1);
reverse(a, 0, m - 1);
reverse(a, m, n - 1);
// 输出循环右移m位整数序列
for (int i = 0; i < n; i++) {
System.out.print(a[i]);
if (i != n - 1) {
System.out.print(" ");
}
}
scanner.close(); // 关闭 Scanner
}
}
解题思路:
输入整数n,m
设数组a循环读取数组元素
调用方法交换数组元素
while循环
递加减更新下标
m %= n;计算循环右移后的实际位移
交换整个前m后n-m
for循环输出数组元素
判断是否为最后一一个元素
为最后一个元素组不输出空格