PAT-B] 1008. 数组元素循环右移问题 [模拟]

链接:1008. 数组元素循环右移问题 (20)

题意

题意应该不难理解。

首先给两个数N, M,分别表示数组的大小右移几位
也就是说第1位数移动到M + 1位,以此类推。
而多出来的数则放在数组的前面。
很像小时候玩的贪吃蛇。

比如样例:
6 2
1 2 3 4 5 6
先是前面的四个数都右移两位:
_ _ 1 2 3 4
然后多出来的5, 6移动到数组前面:
5 6 1 2 3 4

分析

题目理解起来并不难。不过要注意几点:

  1. 给的M可能会比N要大,也就是说可能右移了好几圈。
    比如在400米的操场上跑步,跑100米和跑500米最后停的位置是一样的。
    所以这里我们要对M进行处理,让MN取模(M % N),得到有效的偏移量
  2. 说是右移,其实我们可以在存入数组的时候直接把元素放在合适的位置。假装我们已经右移了。
    (当然想要严格按题意来的可以忽略这一点)

代码

#include <cstdio>

int num[300];

int main()
{
    int N, M;
    while( ~scanf( "%d%d", &N, &M ) ){
        int m = M % N;  // 偏移量
        for( int i = m; i < N; i++ )
            scanf( "%d", num + i );
        for( int i = 0; i < m; i++ )
            scanf( "%d", num + i );
        printf( "%d", num[0] );
        for(int i = 1; i < N; i++ ){
            printf( " %d", num[i] );
        }
        puts("");
    }
    return 0;
}

小结

毕竟OJ都是只看结果的呢…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值