PTA 7-1 数组元素循环右移问题
#include<stdio.h>
#define MAXN 200
int main()
{
int a[200]={0};//要求空间的俩倍
int n=0;//数组中数的实际数量
int m=0;//循环往右的位次
int i;//循环变量
int j;//循环变量
scanf("%d",&n);//输入n
scanf("%d",&m);//输入m
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);//对数组进行输入
}
if (m > n) m = m % n;//如果移动的位次过大(超过了数组本身)其实就可以省略掉一些周期比如大小为N的数组每移动N次就变回原来的
//循环后移:思想:直接移动M位
//具体:1.数组整体往后移动M位 这时候多余分配的空间就有用了 这时候数组中下标为0-M-1中存放的数据无意义 有意义的为N+M-1
//2.把数组后M位搬到前M位中
//
for(j=n+m-1;j>=m;j--)//step1
{
a[j]=a[j-m];//右移
}
//step2
for(i=0,j=n;j<n+m;j++,i++)
{
a[i]=a[j];
}
//step3:print
for(i=0;i<n;i++)
{
printf("%d",a[i]);
if(i!=n-1)
{
printf(" ");
}
}
return 0;
}