复习系列1-DS顺序表之循环移位

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();
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜饼同学

帮助别人,就是帮助自己,共勉。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值