![]() |
#2
rjsp2016-10-31 09:05
|
我的思想是:先把数组后m个数和前m个数先交换,然后用递归
但是总是在 n-m < m 的时候用递归时有问题,怎样修改

#include <iostream>
using namespace std;
const int MaxSize = 100;
void swap(int &a, int &b)
{
a ^= b;
b ^= a;
a ^= b;
}
/*
n : 对n个数进行处理
m : 要改变位置的m个数
len : a[]的使用长度
*/
void reserve(int a[],int start, int n, int m,const int len)
{
cout << start <<endl;
if (start + ((n-m > m)?m:(n-m))== len || n==m)//这里可能有问题
{
return ;
}
int i = start;
if (m < n-m)
{
for (; i < start + m; i++)
{
cout << a[i] << " < " << a[n-m+i] << endl;
swap(a[i], a[n-m+i]);//交换前m个后m个数
}
reserve(a, start+m, n-m, m,len);
}
else if (m == n-m)
{
for (; i < m; i++)
{
cout << a[i] << " = " << a[m+i] << endl;
swap(a[i], a[m+i]);//要处理的前m个数和后m个数正好是整个数组的元素
}
}
else
{
for (; i < start + n - m; i++)
{
cout << a[i] << " > " << a[n-m+i] << endl;
swap(a[i], a[n-m+i]);//交换前m个后m个数
}
reserve(a, start+n-m, m, m, len);//这里可能有问题
}
}
int main()
{
int n, m;
int a[MaxSize];
int i = 0;
cin >> n >> m;
for (; i < n; i++)
{
cin >> a[i];
}
m = m % n;
if (m != n)
reserve(a, 0, n, m,n);
for (i = 0; i < n-1; i++)
{
cout << a[i] << " ";
}
cout << a[i] << endl;
return 0;
}
using namespace std;
const int MaxSize = 100;
void swap(int &a, int &b)
{
a ^= b;
b ^= a;
a ^= b;
}
/*
n : 对n个数进行处理
m : 要改变位置的m个数
len : a[]的使用长度
*/
void reserve(int a[],int start, int n, int m,const int len)
{
cout << start <<endl;
if (start + ((n-m > m)?m:(n-m))== len || n==m)//这里可能有问题
{
return ;
}
int i = start;
if (m < n-m)
{
for (; i < start + m; i++)
{
cout << a[i] << " < " << a[n-m+i] << endl;
swap(a[i], a[n-m+i]);//交换前m个后m个数
}
reserve(a, start+m, n-m, m,len);
}
else if (m == n-m)
{
for (; i < m; i++)
{
cout << a[i] << " = " << a[m+i] << endl;
swap(a[i], a[m+i]);//要处理的前m个数和后m个数正好是整个数组的元素
}
}
else
{
for (; i < start + n - m; i++)
{
cout << a[i] << " > " << a[n-m+i] << endl;
swap(a[i], a[n-m+i]);//交换前m个后m个数
}
reserve(a, start+n-m, m, m, len);//这里可能有问题
}
}
int main()
{
int n, m;
int a[MaxSize];
int i = 0;
cin >> n >> m;
for (; i < n; i++)
{
cin >> a[i];
}
m = m % n;
if (m != n)
reserve(a, 0, n, m,n);
for (i = 0; i < n-1; i++)
{
cout << a[i] << " ";
}
cout << a[i] << endl;
return 0;
}