数组移动问题
有n个整数,使前面各数顺序向后移动m个位置,最后m个数变成最前面m个数,如下图,写一函数实现以上功能,在主函数中输入n个整数和输出调整后的n个数。
解析:
第一步:将arr中红色格子移到brr中
第二步:将蓝色格子依次向后移动
第三步:将brr中的红色格子移到arr中前面
代码如下:
void Move(int *arr,int n,int m)
{
//判断arr是否为空,移动的个数不能大于数组中存放的个数,数组中存放的个数也不能小于等于0
if(arr==NULL || n<m || n<=0)
return;
int *brr = (int*)malloc(m*sizeof(int));//申请动态内存,注意头文件<stdlib.h>及内存释放
int i;//将后m个数字移动到brr中
for(i=0;i<m;i++)
{
brr[i] = arr[n-m+i];
}
//将n-m个数字依次后移
for(i=n-m-1;i>=0;i--)
{
arr[i+m] = arr[i];
}
//将brr中的数移动到arr前m个位置
for(i=0;i<m;i++)
{
arr[i] = brr[i];
}
free(brr);//释放brr动态申请的内存空间,防止内存泄漏
}
总结:
这个题最主要的是第二步,需要考虑清楚到底是前移还是后移,如果此题变成将前m个数移动到数组后面,则需要如何移动?
本题到此为止,有何疑问可评论,最后留下的问题我会在下一篇解决,嘿嘿。