个人觉得自己的想法很机智,首先使用 2N 长度的数组存储了数据,开始输入数据时存储位置为 N-2N-1,所以后续在做右移的时候只需将最后一位的数据放到 N 前面的位置即可,剩下的依此类推。对了,记得考虑当移位次数大于数据总数时特殊情况的考虑,取余即可。原始代码如下:
import java.util.Scanner;
/**
* Created by huliang on 16/7/23.
*/
public class Solution {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int N = scanner.nextInt();
int K = scanner.nextInt();
int Q = scanner.nextInt();
// 获取数组数据
int a[] = new int[2 * N];
for (int i = 0; i < N; i++) {
a[i] = '\0';
}
for (int i = N; i < 2 * N; i++) {
a[i] = scanner.nextInt();
}
// 进行交换操作,注意当 K>N 时需进行取余操作
for (int i = 1; i <= K%N; i++) {
a[N - i] = a[2 * N - i];
a[2 * N - i] = '\0';
}
// 输出需要的值
for (int i = 0; i < Q; i++) {
System.out.println(a[N - K%N + scanner.nextInt()]);
}
}
}
}