题目描述
有 n 个整数,使前面各数顺序向后移 m 个位置,最后 m 个数变成最前面的 m个数,见下图,写一个函数实现该功能。
代码实现
void Move(int* arr, int n, int m)
{
if (m <= 0 || m >= n)
return;
//创建m个长度的int数组
int* brr = (int*)malloc(m * sizeof(int));
assert(brr != NULL);
if (brr == NULL)
return;
//把后面的m个数字移到新数组
int i;
for (i = 0; i < m; i++)//n=10,m=4,
{
brr[i] = arr[n-m+i];
}
//把前面的n-m个数字后移
for (i = n - m - 1; i >= 0; i--)
{
arr[i+m] = arr[i];
}
//把新数组中的m个数组复制到arr的前面
for (i = 0; i < m; i++)
{
arr[i] = brr[i];
}
//释放新数组
free(brr);
}
void Show(const 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};
int n = sizeof(arr) / sizeof(arr[0]);
int m = 6;
Move(arr,n,m);
Show(arr,n);
return 0;
}
总结:注意拷贝数据的方向问题.
标签:arr,return,前面,int,个数,brr,数组,各数 From: https://blog.csdn.net/2301_78353179/article/details/144176339