要求
一个数组A中存有N个整数,在不允许使用另外数组的前提下,将每个整数循环左移M个位置。
代码
#include <stdio.h>
int main()
{
void shift(int a[], int N, int M);
int num[100],N,M,i;
scanf_s("%d%d", &N,&M);
for (i = 0; i < N; i++)
scanf_s("%d", &num[i]);
shift(num, N, M);
for (i = 0; i < N; i++)
printf("%d ", num[i]);
return 0;
}
void shift(int a[], int N,int M)
{
int i, t, j;
M = M % N;/*当M大于N时转化为等价的小于N的数*/
for (i = 0,j=N-1; i <j; i++,j--)/*整个数据倒序*/
{
t = a[j];
a[j] = a[i];
a[i] = t;
}
for (i = 0,j=N-M-1; i <= j; i++, j--)/*前N-M个数倒序*/
{
t = a[j];
a[j] = a[i];
a[i] = t;
}
for(i=N-M, j=N-1;i<=j;i++, j--)/*后M个数倒序*/
{
t = a[j];
a[j] = a[i];
a[i] = t;
}
}