代码编织梦想

6-6 数组循环右移

分数 20

全屏浏览题目

切换布局

作者 张泳

单位 浙大城市学院

本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由(a0​a1​⋯an−1​)变换为(an−m​⋯an−1​a0​a1​⋯an−m−1​)(最后m个数循环移至最前面的m个位置)。

函数接口定义:

void ArrayShift( int a[], int n, int m );

其中a[]是用户传入的数组;n是数组的大小;m是右移的位数。函数ArrayShift须将循环右移后的数组仍然存在a[]中。

裁判测试程序样例:

#include <stdio.h>
#define MAXN 10

void ArrayShift( int a[], int n, int m );

int main()
{
    int a[MAXN], n, m;
    int i;
    
    scanf("%d %d", &n, &m);
    for ( i = 0; i < n; i++ ) scanf("%d", &a[i]);
    
    ArrayShift(a, n, m);
    
    for ( i = 0; i < n; i++ ) {
        if (i != 0) printf(" ");
        printf("%d", a[i]);
    }
    printf("\n");
    
    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

6 2
1 2 3 4 5 6

输出样例:

5 6 1 2 3 4

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

参考答案 
void ArrayShift( int a[], int n, int m ){
    m%=n;
    int b[n];
    for(int i=0;i<n;i++){
        b[i]=a[(n-m+i)%n];//循环右移连招 ①m%=n; ②a[(n-m+i)%n];
    }
    for(int i=0;i<n;i++){
        a[i]=b[i];
    }
}

循环右移连招 ①m%=n; ②a[(n-m+i)%n];

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zRenox/article/details/135094171

牛客周赛 round 26 解题报告 | 珂学家 | 0-爱代码爱编程

前言 整体评价 T3是一道0-1 BFS题, 这样时间复杂度可以控制在O(n*m), 也可以用优先队列。 T4这类题型,在牛客Round周赛系列出现好多次了,要么状态机DP,要么容斥,如果n很大,就用矩阵幂优化

二分查找(一)-爱代码爱编程

算法原理  原理:当一个序列有“二段性”的时候,就可以使用二分查找算法。 适用范围:根据规律找一个点,能将这个数组分成两部分,根据规律能有选择性的舍去一部分,进而在另一个部分继续查找。 除了最普通的二分查找,剩余的二分查找都是以 left == right 为结束条件。 找中点 mid方法:left+(right - left)/2(查找区间左端点

【算法】算法设计与分析 期末复习总结-爱代码爱编程

第一章 算法概述 时间复杂度比大小,用代入法,代入2即可。求渐进表达式,就是求极限,以极限为O的括号;O是指上界,Ω是指下界,θ是指上下界相等,在这里,可以这样理解: f(n) = O(g(n)) 意味着 g(n) 在 n 趋近于无穷大时比 f(n) 大;f(n) = Ω(g(n)) 意味着 g(n) 在 n 趋近于无穷大时比 f(n) 小;f(n)

二叉树part05 算法-爱代码爱编程

二叉树part05 算法 ****今日内容 ●  513.找树左下角的值 ●  112. 路径总和  113.路径总和ii ●  106.从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树 1.

leetcode:908. 最小差值 i-爱代码爱编程

一、题目 二、函数原型 int smallestRangeI(int* nums, int numsSize, int k)  三、思路 本题题目有些绕口,但是无伤大雅。本质就是可以对数组中的每个元素进行加/减 k 的操作,然后求数组中的最大、最小元素的最小差值。 分为几种情况: 1.原数组中最大值和最小值的差值一半 小于等于 k,说明最大

scanf函数和printf函数-爱代码爱编程

1.scanf函数 int scanf ( const char * format, ... ); 函数功能: 从键盘读取数据如果读取成功,返回读取到的数据个数如果读取失败,返回EOF 不常见

问题 d: 删数问题-爱代码爱编程

题目描述 输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原左右次序组成一个新的正整数。编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小。 输出新的正整数。(N不超过240位)输入数据均不需判错。