C++数组后移的问题

cnpws 2009-12-12 01:17:56
void move(int *array,int n,int m) //使循环后移一次的函数
{int *p,array_end;
array_end=*(array+n-1);
for (p=array+n-1;p>array;p--)
*p=*(p-1);
*array=array_end;
m--;
if (m>0) move(array,n,m); //递归调用,当循环次数m减至为0时,停止调用
}

n个数的数组后移m个数,最后m个数变成前面的m个,这个函数我理解不了,请解释下。。。
...全文
334 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dogfish 2009-12-12
  • 打赏
  • 举报
回复
楼上的都解释的很清楚了。程序的效率不是很高。
mmilmf 2009-12-12
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;

//n为数组的长度,m为想要移动的数据的个数
void move(int *array,int n,int m) //使循环后移一次的函数
{
int *p, array_end; //array_end中间变量,用来存储数组的最后一个数
array_end = *(array+n-1); //获取数组中的最后一个数据

for (p = array+n-1 ; p > array ; p--) //使前面的数据在取出最后数据后依次后移,
*p = *(p-1);

*array = array_end; //把最后的数据放在数组的array[0]中

m--; //使移动的数据个数在递归过程中递减,以便结束递归

if (m > 0 ) move(array,n,m); //递归调用,当循环次数m减至为0时,停止调用
}

int main()
{
int a[] = {1,2,3,4,5,6,7,8};

for(int i = 0 ; i < 8 ; i++)
cout<<a[i]<<' ';
cout<<endl;

move(a,8,4);//移动4个数据

for(i = 0 ; i < 8 ; i++)
cout<<a[i]<<' ';
cout<<endl;

return 0 ;
}

结果
1 2 3 4 5 6 7 8
5 6 7 8 1 2 3 4
Press any key to continue
解释
//第一次 8 1 2 3 4 5 6 7
//第二次 7 8 1 2 3 4 5 6
//第三次 6 7 8 1 2 3 4 5
//第四次 5 6 7 8 1 2 3 4
  • 打赏
  • 举报
回复


void move(int *array,int n,int m) //使循环后移一次的函数
{int *p,array_end;
array_end=*(array+n-1); //先缓存最后一个元素
for (p=array+n-1;p>array;p--) //把除了最后一个元素的n-1个元素都后移一位
*p=*(p-1);
*array=array_end; //第一位存最后一个数 ,至此,一个数组循环后移一位完成
m--; //计数,要后移m位
if (m>0) move(array,n,m); //递归调用,当循环次数m减至为0时,停止调用
}


够清楚了吧?还不明白我也没办法了。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧