新手求助。。。望指点哈。。
用指针操作将一个一维数组中的n个整数做以下处理:顺序将前面各数后移m个位置,使最后面的m个数变成最前面的m个数。这个思路应该从哪里入手。。。谢谢
#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个数进行相同的操作;