数组元素循环右移

Posted vectors07

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组元素循环右移相关的知识,希望对你有一定的参考价值。

 

include<stdio.h>
#include<process.h>
#pragma warning(disable:4996)
#include"gcd.h"
#include"Reverse.h"
void ShiftRight1(int m,int *a,int n) {
	int _i;
	int k;
	int nxt;
	int tmp;

	if (m == 0) return;

	if (n >= m)
		_i = gcd(n, m);
	else
		_i = gcd(m, n);
	for (int i = 0; i < _i; i++) {
		k = i;            //该轮跳写起始i
		nxt = a[k];       //待跳写元素
		do {
			k = (k + m) % n;
			tmp = a[k];         //写入原位前暂存该位元素
			a[k] = nxt;
	        nxt = tmp;          
		} while (k != i);
	}
}

void ShiftRight2(int m,int *a,int n) {
	m %= n;   //m置为有效的移位数量
	if (m == 0)return;

	Reverse(a, n);      //数组逆序
	Reverse(a, m);      //以右循环移位数为分割,前后分别逆序
	Reverse(a + m, n - m);
}
int main() {
	int n;
	int M;
	int *a;
	int _i;
	scanf("%d %d", &n, &M);
	a = new int[n];
	for (int i = 0; i<n; i++) {
		scanf("%d", &a[i]);
	}
	//ShiftRight1(M, a, n);
	ShiftRight2(M, a, n);
	for (int i = 0; i<n; i++) {
		printf("%d ", a[i]);
	}
	printf("\\n");
	system("pause");
}

 

以上是关于数组元素循环右移的主要内容,如果未能解决你的问题,请参考以下文章

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

B1008 数组元素循环右移问题 (20分)

PAT乙级 1008. 数组元素循环右移问题 (20)

自测-3 数组元素循环右移问题 (20 分)—— 数据结构-起步能力自测题

PAT 乙级 水题 1008. 数组元素循环右移问题 (20)

1008. 数组元素循环右移问题 (20) Java