33,311
社区成员
发帖
与我相关
我的任务
分享
#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时,停止调用
}