求指教,uc笔试题,将2n个数据按要求重排,要求时间复杂度O(n),空间复杂度O(1)
/*
将2n个数据{a1,a2,...an,b1,b2,..bn} 重新排列,排成{a1,b1,a2,b2...an,bn},要求时间复杂度O(n),空间复杂度O(1)。
以上是原题,但是下面我把原数据改成{A,B,C,D,...,a,b,c,d...}
*/
#include<iostream>
#include<string>
using namespace std;
int main()
{
int i=0,n;
string data;
int num[100];
cout<<"输入n值:";
cin>>n;
while(i<n)
{data+=('A'+i);i++;}
i=0;
while(i<n)
{data+='a'+i;i++;}
cout<<"目前的状态:"<<data;
getchar();
getchar();
for(i=0;i<2*n+1;i++)
num[i]=0;//cout<<num[i];}
//cout<<"kkk";cout<<num;getchar();
i=1;
char value=data[i],value2;
while(num[2*n]<2*n)//
{
if(!num[i])
{
if(i<n)
{
num[i]=1;
i=2*i;
}
else
{
num[i]=1;
i=(i-n+1)*2-1;
}
value2=data[i];
data[i]=value;
value=value2;
num[2*n]++;
}
else
{
i=(i+1)%(2*n);
value=data[i];
}
}
cout<<data;
getchar();
return 1;
}