PAT B1008. 数组元素循环右移问题

2024-06-19 00:52

本文主要是介绍PAT B1008. 数组元素循环右移问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 题目描述
一个数组A中存有N(N>O)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M≥0)个位置,即将A中的数据由(A_{0}^{}A_{1}^{} …A_{N-1}^{})变换为(A_{N-M}A_{N-1}A_{0}^{}A_{1}^{}·…A_{N-M-1})(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,则应如何设计移动的方法?
输入格式
每个输入包含一个测试用例,第一行输入N(1≤N≤100)、M (M≥0);第二行输入N个整数,之间用空格分隔。
输出格式
在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。
输入样例

6 2
1 2 3 4 5 6

输出样例

5 6 1 2 3 4

思路:

         题目中虽然给出了很多限制,例如不允许使用另外的数组、又要考虑移动数据的次数最少,但实际上却只测试循环右移之后得到的结果而不管过程。对于这种题目,考生其实可以不用管题目中那些限制,直接输出答案即可。
        首先需要注意题目并没有给定M的最大值,因此不能直接认为M<N,而需要在读入N和M后令M=M%N,这样就可以保证M<N,使后面的操作更简便。这样做的依据是:对一个长度为N的序列,右移N位之后的序列和当前序列是相同的。
        在得到新的M后,可以直接输出序列从N-M号元素到N-1号元素,再输出О号元素到N-M-1号元素即可。
注意点
①处理最后一个数字之后不输出空格可以使用count变量记录已经输出数的个数,只要count没有达到N,就输出空格。

 代码实现:

#include<cstdio>int main()
{int n,m;scanf("%d%d",&n,&m);int count = 0;  //记录输出的数量 int a[110];for(int i = 0;i < n;i++){scanf("%d",&a[i]);}m = m % n;  //修正 m for(int i = n - m;i < n; i++)  //输出n-m号到n-1号 { printf("%d",a[i]);count++;  //已输出数的个数+1 if(count < n) printf(" ");}for(int i = 0;i< n - m;i++)  //输出0到n-m-1号 {printf("%d",a[i]);count++;if(count < n) printf(" ");}return 0;
}

这篇关于PAT B1008. 数组元素循环右移问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1073550

相关文章

C++一个数组赋值给另一个数组方式

《C++一个数组赋值给另一个数组方式》文章介绍了三种在C++中将一个数组赋值给另一个数组的方法:使用循环逐个元素赋值、使用标准库函数std::copy或std::memcpy以及使用标准库容器,每种方... 目录C++一个数组赋值给另一个数组循环遍历赋值使用标准库中的函数 std::copy 或 std::

Nginx启动失败:端口80被占用问题的解决方案

《Nginx启动失败:端口80被占用问题的解决方案》在Linux服务器上部署Nginx时,可能会遇到Nginx启动失败的情况,尤其是错误提示bind()to0.0.0.0:80failed,这种问题通... 目录引言问题描述问题分析解决方案1. 检查占用端口 80 的进程使用 netstat 命令使用 ss

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

mybatis和mybatis-plus设置值为null不起作用问题及解决

《mybatis和mybatis-plus设置值为null不起作用问题及解决》Mybatis-Plus的FieldStrategy主要用于控制新增、更新和查询时对空值的处理策略,通过配置不同的策略类型... 目录MyBATis-plusFieldStrategy作用FieldStrategy类型每种策略的作

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没

linux下多个硬盘划分到同一挂载点问题

《linux下多个硬盘划分到同一挂载点问题》在Linux系统中,将多个硬盘划分到同一挂载点需要通过逻辑卷管理(LVM)来实现,首先,需要将物理存储设备(如硬盘分区)创建为物理卷,然后,将这些物理卷组成... 目录linux下多个硬盘划分到同一挂载点需要明确的几个概念硬盘插上默认的是非lvm总结Linux下多

Python Jupyter Notebook导包报错问题及解决

《PythonJupyterNotebook导包报错问题及解决》在conda环境中安装包后,JupyterNotebook导入时出现ImportError,可能是由于包版本不对应或版本太高,解决方... 目录问题解决方法重新安装Jupyter NoteBook 更改Kernel总结问题在conda上安装了

pip install jupyterlab失败的原因问题及探索

《pipinstalljupyterlab失败的原因问题及探索》在学习Yolo模型时,尝试安装JupyterLab但遇到错误,错误提示缺少Rust和Cargo编译环境,因为pywinpty包需要它... 目录背景问题解决方案总结背景最近在学习Yolo模型,然后其中要下载jupyter(有点LSVmu像一个

解决jupyterLab打开后出现Config option `template_path`not recognized by `ExporterCollapsibleHeadings`问题

《解决jupyterLab打开后出现Configoption`template_path`notrecognizedby`ExporterCollapsibleHeadings`问题》在Ju... 目录jupyterLab打开后出现“templandroidate_path”相关问题这是 tensorflo