当前位置:网站首页>PAT乙级-B1008 数组元素循环右移问题(20)
PAT乙级-B1008 数组元素循环右移问题(20)
2022-08-03 14:20:00 【nekoha_dexter】
一个数组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
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include<iostream>
#include<vector>
using namespace std;
int N, M;
vector<int> a;
//1、用vector存放数组
//2、确定第一个输出的下标,如循环往右移动2位,即队首下标从0变成4
//2.1输出队首下标~N-1的元素,如输出5、6
//2.2输出下标0~队首下标-1的元素,如输出1、2、3、4
//最终即5 6 1 2 3 4
int main(){
cin >> N >> M;
a.resize(N);
for(int i = 0; i < N; ++i)
cin >> a[i];
int f = (N - M%N) % N;//确定队首位置
//输出队首下标~N-1的元素
cout << a[f];
for(int i = f + 1; i < N; ++i)
cout << " " << a[i];
//输出0~队首-1的元素
for(int i = 0; i < f; ++i)
cout << " " << a[i];
return 0;
}
边栏推荐
猜你喜欢
随机推荐
进程通信的方式
项目管理:PMP和IPMP哪个更值得考?两个证书的区别在于哪里?
Lecture 2 Software Life Cycle
LeetCode15:三数之和
MMA安装及使用优化
petri网-1、概论
LARS(最小角回归)
c语言结构体知识总结
阿里大牛最新总结分享的高并发编程核心笔记(终极版),高并发系统架构场景一应俱全
1, introduction to petri net
chrome浏览器对应驱动_chrome手机浏览器
树莓派 USB摄像头 实现网络监控( MJPG-Streamer)
想成为网络安全技术爱好者(可能是黑客)的话,需要看什么书?
MySQL知识总结 (十二) 数据库相关概念
MySQL【视图】
With 1000 lines of code statistics after the xi 'an housing prices, I have a startling discovery...
兆骑科创高层次人才引进平台,创新创业赛事活动路演
HCIP Fifteenth Day Notes (Three-layer Architecture of Enterprise Network, VLAN and VLAN Configuration)
网络通信的过程
APT组织最喜欢的工具 Cobalt Strike (CS) 实战