书本的代码
typedef int DataType;
void Reverse(DataType A[],int left,int right,int arraySize){
//逆转(aleft,aleft+1,aleft+2,...aright)为(aright,aright-1,...,aleft)
if(left>=right||right>=arrSize)
return;
int mid=(left+right)/2;
for(int i =0;i<=mid-left;i++){
DataType temp=A[left-i];
A[left+i]=A[right-i];
A[right-i]=temp;
}
}
void Exchange(DataType A[],int m ,int n,int arraySize){
/*数组A[m+n]中,从0到m-1存放顺序表(a1,a2,a3,....,am),从m到m+n-1存放顺序表(b1,b2,b3,...,bn),算法将这两个表的位置互换*/
Reverse(A,0,m+n-1,arraySize);
Reverse(A,0,n-1,arraySize);
Reverse(A,n,m+n-1,arraySize);
}
我的想法
我觉得王道的思维有点略显复杂,实际上,原来的位置+平移长度对全长度进行取余,得到的结果就恰好是最后的坐标,所以这题可以大胆的使用这个方法。
大意如图(画的不好)
代码如下:
我的代码
#include
#include
void ChangeList(int A[],int m,int n){//A的元素的总量为n+m
int temp1=A[0],temp2;//交换中间变量
int all=m+n;
if(all&1){//为奇数
for(int i=0;i