一、题目

一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A​0A1⋯AN−1变换为(A​N−M⋯A​N−1A0A​1⋯A​N−M−1)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?
输入格式:
每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。输出格式:
在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。输入样例:
6 2
1 2 3 4 5 6
输出样例:
5 6 1 2 3 4

二、代码

方法一:(使用了额外的数组,但是是自己想的)

  • 新的函数
    没有
    *核心思想
  1. 本题中要求向右移动m个位置, 我们很容易根据(m+i)%n求出移动后的位置,但是a[i]的元素该何去何从??
    之后我发现,我们只需要将a[0] ~ a[n] 循环移动,(移动后的需要进行标记,不能再移动), 就可以在最后完成移动。
    所以需要a[n]来存储数组,b[(m+i)%n]=1来确定是否这个下标的a[(m+i)%n]已经移动过!!

*问题

  1. 本题中要求最后不能有空格!!所以需要将最后一个特殊处理
#include <iostream>
using namespace std;int main() {int a[101];int b[101] = {0};int i, j = 0, n, m, temp;cin>>n>>m;for(i=0; i<n; i++) {cin>>a[i];}  for(i=0; i<n; i++) {if(b[i] == 0) {temp = a[i];a[i] = a[(i+m)%n];a[(i+m)%n] = temp;b[(i+m)%n] = 1;}}for(i=0; i<n; i++) {if(i != n-1) {cout<<a[i]<< " ";}else {cout<<a[i];}}return 0;}

方法二:(网上的做法,很精彩)

  • 核心思想
  1. 主题思想是,在输入的时候就按照移动过后的进行输入。所以输入 = 移动
  2. 同时他也相当于从i=0开始进行的,因为m = (i+m) % n === m = (m++)%n
    循环n次,也就将各个值放入了a【n】中

#include <stdio.h>int main()
{int n,m;scanf("%d %d",&n,&m);if(n<=100&&n>=1){ int temp[n];for(int i=0;i<n;i++){m=m%n;scanf("%d",&temp[m]);m++;}int count=1;for(int i=0;i<n;i++){printf("%d",temp[i]);if(count<n){ printf(" ");count++;} }}return 0;
}

PAT乙类1008之数组元素循环右移问题相关推荐

  1. PTA 乙级 【1008】 数组元素循环右移问题

    PTA 乙级 [1008] 数组元素循环右移问题 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置(最后M个数循环移至最前面的M个位置).如果 ...

  2. PAT (Basic Level) Practice1008 数组元素循环右移问题

    1008 数组元素循环右移问题 一.题目 一个数组A中存有N(>0)N(>0)N(>0)个整数,在不允许使用另外数组的前 提下,将每个整数循环向右移M(≥0)M(≥0)M(≥0)个位 ...

  3. 浙江大学PAT上机题解析之1008. 数组元素循环右移问题 (20)

    1008. 数组元素循环右移问题 (20) 时间限制  400 ms 内存限制  32000 kB 代码长度限制  8000 B 判题程序    Standard 一个数组A中存有N(N>0)个 ...

  4. C++学习之路 | PTA乙级—— 1008 数组元素循环右移问题 (20分)(精简)

    1008 数组元素循环右移问题 (20分) 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A ​0 ​​ A ​1 ​​ ...

  5. 1008 数组元素循环右移问题(C语言)

    1008 数组元素循环右移问题 (20 分) 一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0 A1--A ...

  6. PATB 1008 数组元素循环右移问题

    1008 数组元素循环右移问题 (20 分) 一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0 A1--A ...

  7. 7-1 数组元素循环右移问题 (20 分)

    7-1 数组元素循环右移问题 (20 分) 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0A​1 ⋯A​N−1​​ ...

  8. c++string转char数组_C++ 算法题解:打印沙漏、素数对猜想、数组元素循环右移问题...

    作者:鲸90830  链接:https://www.cnblogs.com/whale90830/p/10688802.html DS_起步自测 中国大学MOOC_陈越.何钦铭_数据结构_起步能力自测 ...

  9. 7-2 数组元素循环右移问题 (40 分)

    ** 7-2 数组元素循环右移问题 (40 分) ** 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A 0 A 1 ⋯ ...

最新文章

  1. Python 为什么用 # 号作注释符?
  2. [bzoj 2456]mode
  3. java高并发(十九)死锁、spring线程安全
  4. mysql 跨库复制_Mysql跨数据库(在同一IP地址中)复制表
  5. KOFLive Beta Daily-Scrum 9
  6. python从入门到大神系列手机_python从入门到大神---2、和Python编程相遇的日子
  7. 【数据库系统】事务、锁、隔离、自动恢复
  8. 基于bootstrap_登陆页面
  9. html分页器的实现原理,Django之分页器
  10. 将字符串放到字符串数组中
  11. 2019最有意思的五大 ZDI 案例之:通过调色板索引实现 Win32k.sys 本地提权漏洞(上)...
  12. linux内核按键驱动,嵌入式Linux按键驱动框架
  13. 计算机信息管理系统设计原理探究,计算机信息管理系统设计原理探究
  14. Mac如何打开CAJ格式的文件?
  15. linux 更新系统命令,Linux系统自动更新时间命令的详细说明
  16. 【Java】认识Sring、String的常见操作和StringBuffer 和StringBuilder的区别【字符串详解】
  17. python文件write原理,Python写入文件(write和writelines)详解
  18. 备份android分区,安卓手机手动【备份+还原】分区
  19. 【ts】typeScript高阶:any和unknown
  20. 为什么Android手机总是越用越慢?

热门文章

  1. 使用bootstrap-table插件
  2. 使用Marshal.Copy把Txt行数据转为Struct类型值
  3. Java中,String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?...
  4. 邹建老大写的经典SQL
  5. boost::function的用法(一)
  6. python价值观测试程序例子_PyBrains学习迷宫的例子。国家价值观与全球政策
  7. python怎么数据归一化_基于数据归一化以及Python实现方式
  8. 自己动手写java虚拟机_自己动手写操作系统(要了解的知识点)
  9. Redis常见数据类型_Redis通用指令
  10. 一、操作系统——处理机(作业)调度算法:先来先服务算法FCFS、最短作业优先算法SJF(非抢占式)、 最短剩余时间优先算法SRTN(抢占式)、最高响应比优先算法HRRN