Pagini recente » Cod sursa (job #322611) | Cod sursa (job #652409)
Cod sursa(job #652409)
#include <fstream>
#define vL 10
using namespace std;
ifstream in;
ofstream out;
int v[vL];
inline int BS(int x,int L,int R)
{
if(L<R)
{
int M=(L+R)/2;
if(x>v[M]) return BS(x,L,M);
else return BS(x,M+1,R);
}
else return L;
}
int main()
{
int N,pos1,pos2;
in.open("permutari.in");
in>>N;
in.close();
out.open("permutari.out");
for(int i=1;i<=N;++i) v[i]=i;
for(int i=1;i<N;++i) out<<i<<' ';
out<<N<<'\n';
while(1)
{
for(pos1=N;pos1&&v[pos1]<v[pos1-1];--pos1);
--pos1;
if(!pos1) break;
pos2=BS(v[pos1],pos1+1,N+1);
--pos2;
v[pos1]^=v[pos2];
v[pos2]^=v[pos1];
v[pos1]^=v[pos2];
for(int i=pos1+1,j=N;i<j;++i,--j)
{
v[i]^=v[j];
v[j]^=v[i];
v[i]^=v[j];
}
for(int i=1;i<N;++i) out<<v[i]<<' ';
out<<v[N]<<'\n';
}
out.close();
return 0;
}