DS顺序表之循环移位
感觉这几道题偏简单,没有必要单独写一个类,还是简单粗暴些,用最直接的方法A掉吧。本着简便直接,发现这题有个小trick,向右移动 trans 位,其实等价于向左移动 n - trans 位。
题目描述
顺序表的移位是循环移位,例如顺序表:1,2,3,4,5,6。如果左移1位,即原来的头元素移动到末尾,其它元素向左移1位,变成2,3,4,5,6,1。同理,如果右移1位,即原来的尾元素移动到头,其它元素向右移1位,变成6,1,2,3,4,5。以下是移位的多个例子:
原数据:1,2,3,4,5,6
左移3位:4,5,6,1,2,3,与原数据对比
右移4位:3,4,5,6,1,2,与原数据对比
请编写程序实现顺序表的循环移位操作
输入
第1行输入n表示顺序表包含的·n个数据
第2行输入n个数据,数据是小于100的正整数
第3行输入移动方向和移动的位数,左移方向为0,右移方向为1
第4行输入移动方向和移动的位数,左移方向为0,右移方向为1
注意:移动操作是针对上一次移动后的结果进行的
输出
第一行输出创建后,顺序表内的所有数据,数据之间用空格隔开
第二行输出第一次移位操作后,顺序表内的所有数据,数据之间用空格隔开
第三行输出第二次移位操作后,顺序表内的所有数据,数据之间用空格隔开
样例输入
5
11 22 33 44 55
0 2
1 4
样例输出
11 22 33 44 55
33 44 55 11 22
44 55 11 22 33
Solution:
import java.util.*;
/**
* @author: Liu Canbin
* @date: 2019/1/2
*/
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// init data
int n = scanner.nextInt();
int[] a = new int[n];
for (int i = 0; i <n ; i++) {
a[i] = scanner.nextInt();
}
show(a);
for (int i = 0; i <2 ; i++) {
int direction = scanner.nextInt();
int trans = scanner.nextInt();//left
if (direction ==1) {//right == size - left
trans = n - trans;
}
int[] b = new int[n];
int k =0;
for (int j = trans; j <n ; j++,k++) {
b[k] =a[j];
}
for (int j = 0; j < trans; j++,k++) {
b[k] = a[j];
}
a = b;
show(a);
}
}
private static void show(int[] a){
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+" ");
}
System.out.println();
}
}