有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数。见下图。写一函数实现以上功能,在主函数中输入n个整数和输出调整后的n个数。
1⃣️:原本的数据,记n=10、m=3
2⃣️:将后三个数据取出放入一个新容器中
3⃣️:将前面七个数据向后移动三位,再将后三个数据挪进去
4⃣️:创建一个新格子,格子大小为m(运用到动态内存)
5⃣️:将7先向后移动三位,i的位置表示为I=n-m-1
6⃣️:n-m个数字移动完后,将整个格子挪到前面的位置中
#include <stdio.h>
void Move(int *arr,int m,int n)
{
assert(arr!=NULL);
if(m<=0||n<=0||m>=n)//不用挪
return;
int *brr = (int *)malloc(m*sizeof(int));
int i;
/*for(i=n-m;i<n;i++)
{
brr[i-n+m] = arr[i];//i作为arr下标,容器下标为i-(n-m)
}*/
for(i=0;i<m;i++)//i作为brr下标
{
brr[i] = arr[i+n-m];
}
//将arr前段数据后移
for(i=n-m-1;i>=0;i--)
{
arr[i+m] = arr[i];
}
for(i=0;i<m;i++)
{
arr[i] = brr[i];
}
free(brr);
}
void Show(int *arr,int len)
{
for(int i=0;i<len;i++)
{
printf("%d",arr[i]);
}
printf("\n");
}
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10};
Move(arr,3,sizeof(arr)/sizeof(arr[0]));
Show(arr,sizeof(arr)/sizeof(arr[0]));
return 0;
}
令m=3,将12345678910移动结果输出:
89101234567