PTA(BasicLevel)-1008数组元素循环右移问题
一 、问题描述
将长度为n的整形数组A进行右移m位操作, [A0 A1 A2 A3 ... Am...An-1]变为[An-m...An-1 A0 A1 A2 A3 ...An-m-1 ]
输入格式:
每个输入包含一个测试用例,第1行输入N(>0)和M(>=0);第2行输入N个整数,之间用空格分隔。
输出格式:
在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。
输入样例:
6 2
1 2 3 4 5 6
输出样例:
5 6 1 2 3 4
二、解题思路
比较常用的思路就是逆序打印再正序打印,和三次逆序翻转。
显然翻转操作解题更符合题意,通过三次翻转操作,可得到右移的数组。首先对数组A整体进行翻转,然后再对A[0]到A[m-1]进行翻转,最后再对A[m]到A[n-1]这部分进行翻转操作,最后得到右移效果。
下图为n= 10, m = 4的例子:

解题代码如下:
#include <stdio.h> void printMove( int A[], int arraySize )
{
int j;
for ( j = ; j < arraySize; j++ ) {
printf("%d", A[j]);
if ( j < (arraySize - ) ) {
printf(" ");
}
}
} void move( int A[], int left, int right)
{
while ( left < right ) {
int temp = A[left];
A[left] = A[right];
A[right] = temp; left++;
right--;
}
} void move_A( int A[], int left, int right )
{ // 从左到右进行元素交换
int i, mid, tmp; mid = ( right - left + ) / ;
for ( i = ; i < mid; i++ ) {
tmp = A[i + left];
A[i + left] = A[right - i];
A[right - i] = tmp;
}
} int main(int argc, char *argv[])
{
int i, j;
int arraySize, moveStep;
scanf("%d %d", &arraySize, &moveStep); int A[arraySize];
for ( i = ; i < arraySize; i++ ) {
scanf("%d", &A[i]);
//A[i] = i+1;
} /* three step */
if ( moveStep > ) {
moveStep = moveStep % arraySize;
move( A, , arraySize - );
//printMove( A, arraySize ); printf("\n"); move( A, , moveStep - );
//printMove( A, arraySize ); printf("\n"); move( A, moveStep, arraySize - );
printMove( A, arraySize ); //printf("\n");
} else {
printMove( A, arraySize ); //printf("\n");
} return ;
}
Python版本:
nums = input()
L = nums.split(" ")
A, B = int(L[0]), int(L[-1])
B = B % A numChars = input().split(" ")
Array = [ int(i) for i in numChars ] if B > 0:
Array = Array[::-1]
leftA = Array[:B][::-1]
rightA = Array[B:][::-1]
Array = leftA + rightA length= len(Array)
for i in range(length):
print( Array[i], end="")
if i < (length - 1):
print( " ", end="")
i = i + 1
PTA(BasicLevel)-1008数组元素循环右移问题的更多相关文章
- PAT乙级 1008. 数组元素循环右移问题 (20)
1008. 数组元素循环右移问题 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 一个数组A中存有N(N>0)个整数,在不允 ...
- PAT乙级真题1008. 数组元素循环右移问题 (20)
原题: 1008. 数组元素循环右移问题 (20) 时间限制400 ms内存限制65536 kB 一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M&g ...
- PAT-乙级-1008. 数组元素循环右移问题 (20)
1008. 数组元素循环右移问题 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 一个数组A中存有N(N>0)个整数,在不允 ...
- [C++]PAT乙级1008.数组元素循环右移问题 (20/20)
/* 1008. 数组元素循环右移问题 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 一个数组A中存有N(N>0)个整数, ...
- PAT 乙级 1008 数组元素循环右移问题 (20) C++版
1008. 数组元素循环右移问题 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 一个数组A中存有N(N>0)个整数,在不允 ...
- PAT 1008 数组元素循环右移问题 (20)(代码)
1008 数组元素循环右移问题 (20)(20 分) 一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A ...
- 【PAT】1008. 数组元素循环右移问题 (20)
1008. 数组元素循环右移问题 (20) 一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0A1……AN- ...
- PAT 乙级 1008.数组元素循环右移问题 C++/Java
1008 数组元素循环右移问题 (20 分) 题目来源 一个数组A中存有N(>)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥)个位置,即将A中的数据由(A0A1⋯ ...
- PTA(Basic Level)1008.数组元素循环右移问题
一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0A1⋯AN−1)变换为(AN−M⋯AN−1A0A1⋯AN−M−1)(最 ...
随机推荐
- 在Windows10中破解一些软件
在Windows10中破解一些软件 一.前言 以前的windows是很好破解的,这里说的windows包含了windows的一些产品,比如说office,visio等等,可是自从到了新版的wind ...
- Nowcoder Girl 初赛 T5
Nowcoder Girl 初赛第五题 来源 Nowcoder Girl 初赛第五题 题面 \(n(1<=n<=10000)\)件武器,每件武器对于属性有加成,一共五种属性.若使用其中的\ ...
- nginx+lvs+keepalived安装
安装nginx 配置文件和之前的一样 user nobody nobody; #定义Nginx运行的用户和用户组 worker_processes 4; #nginx进程数,建议设置为等于 ...
- [T-ARA][20090729]
歌词来源:http://music.163.com/#/song?id=484058959 在基本发音规则之上,考虑到了音变的某些情况,最后结合听力搞定的一版歌词发音(只要学完养乐多老师的教程应该读起 ...
- python对列表中的字典进行排序
数据显示为: rows=[{'日期': '2018-09-04', '测试1': '50.00 %', '测试2': '100.00%'}, {'日期': '2018-09-05', '测试1': ' ...
- angularJs的工具方法1
一.angular.bind(); 改this指向 <!DOCTYPE HTML> <html ng-app> <head> <meta http-equ ...
- 网络Socket编程(简易qq实现之C/S通信1)
1. 目标:实现两个用户之间的通信,利用的是简单的Socket知识以及简略界面 2. 界面:分为客户端与服务器端(如下图) 3. 基本功能:客户端先向服务器端发送一个消息,这样就可以让客户端与服务器端 ...
- 创建 JavaScript 对象
http://www.w3school.com.cn/js/js_objects.asp 创建 JavaScript 对象 通过 JavaScript,您能够定义并创建自己的对象. 创建新对象有两种不 ...
- 4、Spring Cloud-负载均衡 Ribbon
4.1.RestTemplate 简介 RestTemplate是Spring Resources中一个访问RESTful API 接口的网络请求框架. RestTemplate 的设计 则和其他 ...
- 20155328 2016-2017-2 《Java程序设计》第九周学习总结
20155328 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 16.1 JDBC入门 JDBC是Java联机数据库的标准规范,定义一组标准类与接口,应用程 ...