PAT乙类1008之数组元素循环右移问题
一、题目
一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0A1⋯AN−1变换为(AN−M⋯AN−1A0A1⋯AN−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
二、代码
方法一:(使用了额外的数组,但是是自己想的)
- 新的函数
没有
*核心思想
- 本题中要求向右移动m个位置, 我们很容易根据(m+i)%n求出移动后的位置,但是a[i]的元素该何去何从??
之后我发现,我们只需要将a[0] ~ a[n] 循环移动,(移动后的需要进行标记,不能再移动), 就可以在最后完成移动。
所以需要a[n]来存储数组,b[(m+i)%n]=1来确定是否这个下标的a[(m+i)%n]已经移动过!!
*问题
- 本题中要求最后不能有空格!!所以需要将最后一个特殊处理
#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;}
方法二:(网上的做法,很精彩)
- 核心思想
- 主题思想是,在输入的时候就按照移动过后的进行输入。所以输入 = 移动
- 同时他也相当于从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之数组元素循环右移问题相关推荐
- PTA 乙级 【1008】 数组元素循环右移问题
PTA 乙级 [1008] 数组元素循环右移问题 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置(最后M个数循环移至最前面的M个位置).如果 ...
- PAT (Basic Level) Practice1008 数组元素循环右移问题
1008 数组元素循环右移问题 一.题目 一个数组A中存有N(>0)N(>0)N(>0)个整数,在不允许使用另外数组的前 提下,将每个整数循环向右移M(≥0)M(≥0)M(≥0)个位 ...
- 浙江大学PAT上机题解析之1008. 数组元素循环右移问题 (20)
1008. 数组元素循环右移问题 (20) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 8000 B 判题程序 Standard 一个数组A中存有N(N>0)个 ...
- C++学习之路 | PTA乙级—— 1008 数组元素循环右移问题 (20分)(精简)
1008 数组元素循环右移问题 (20分) 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A 0 A 1 ...
- 1008 数组元素循环右移问题(C语言)
1008 数组元素循环右移问题 (20 分) 一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0 A1--A ...
- PATB 1008 数组元素循环右移问题
1008 数组元素循环右移问题 (20 分) 一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0 A1--A ...
- 7-1 数组元素循环右移问题 (20 分)
7-1 数组元素循环右移问题 (20 分) 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0A1 ⋯AN−1 ...
- c++string转char数组_C++ 算法题解:打印沙漏、素数对猜想、数组元素循环右移问题...
作者:鲸90830 链接:https://www.cnblogs.com/whale90830/p/10688802.html DS_起步自测 中国大学MOOC_陈越.何钦铭_数据结构_起步能力自测 ...
- 7-2 数组元素循环右移问题 (40 分)
** 7-2 数组元素循环右移问题 (40 分) ** 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A 0 A 1 ⋯ ...
最新文章
- Python 为什么用 # 号作注释符?
- [bzoj 2456]mode
- java高并发(十九)死锁、spring线程安全
- mysql 跨库复制_Mysql跨数据库(在同一IP地址中)复制表
- KOFLive Beta Daily-Scrum 9
- python从入门到大神系列手机_python从入门到大神---2、和Python编程相遇的日子
- 【数据库系统】事务、锁、隔离、自动恢复
- 基于bootstrap_登陆页面
- html分页器的实现原理,Django之分页器
- 将字符串放到字符串数组中
- 2019最有意思的五大 ZDI 案例之:通过调色板索引实现 Win32k.sys 本地提权漏洞(上)...
- linux内核按键驱动,嵌入式Linux按键驱动框架
- 计算机信息管理系统设计原理探究,计算机信息管理系统设计原理探究
- Mac如何打开CAJ格式的文件?
- linux 更新系统命令,Linux系统自动更新时间命令的详细说明
- 【Java】认识Sring、String的常见操作和StringBuffer 和StringBuilder的区别【字符串详解】
- python文件write原理,Python写入文件(write和writelines)详解
- 备份android分区,安卓手机手动【备份+还原】分区
- 【ts】typeScript高阶:any和unknown
- 为什么Android手机总是越用越慢?
热门文章
- 使用bootstrap-table插件
- 使用Marshal.Copy把Txt行数据转为Struct类型值
- Java中,String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?...
- 邹建老大写的经典SQL
- boost::function的用法(一)
- python价值观测试程序例子_PyBrains学习迷宫的例子。国家价值观与全球政策
- python怎么数据归一化_基于数据归一化以及Python实现方式
- 自己动手写java虚拟机_自己动手写操作系统(要了解的知识点)
- Redis常见数据类型_Redis通用指令
- 一、操作系统——处理机(作业)调度算法:先来先服务算法FCFS、最短作业优先算法SJF(非抢占式)、 最短剩余时间优先算法SRTN(抢占式)、最高响应比优先算法HRRN