新手求助。。。望指点哈。。
用指针操作将一个一维数组中的n个整数做以下处理:顺序将前面各数后移m个位置,使最后面的m个数变成最前面的m个数。这个思路应该从哪里入手。。。谢谢
2010-11-22 17:03
2010-11-22 20:58

2010-11-22 22:34

2010-11-22 22:46
2010-11-23 10:28
2010-11-23 10:52
程序代码:#include<iostream>
using namespace std;
int change(int *p, int n, int m)
{
int i,temp;
if (n <=0 || m <= 0 )
return 0; //当数组或者需要交互的数都为0时,结束递归!
if (n-m > m) //数组前面的数据个数大于m时,直接进行交互,并改变指针值,进入下次递归;
{
for (i =0; i < m; i++)
{
temp = p[i];
p[i] = p[n-m+i];
p[n-m+i] = temp;
}
p = p+m;
change(p, n-m, m);
}
else //当数组前面的数据小于m时,重新考虑数组,把m的值给成n-m,只交换一部分,然后再次进入递归!
{
for (i =0; i< n-m; i++)
{
temp = p[i];
p[i] = p[n-m+i];
p[n-m+i] = temp;
}
p = p+n-m;
change(p, m,2*m-n);
}
return 0;
}
int main()
{
int m,i;
int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
cout << "please input m:\n"<< endl;
cin >> m;
int *p;
p = a;
change(p, 10, m);
for (i = 0; i< 10; i++)
cout << a[i] << " " ; //这里写a[i]和p[i]结果是一样的,就不多说了。。
return 0;
}采用递归,每次把最后m个数组和最前面的m个数互换,然后在对数组后面的n-m个数进行相同的操作;
2010-11-23 11:18