Pagini recente » Cod sursa (job #3253271) | Cod sursa (job #1738811) | Cod sursa (job #2642072) | Cod sursa (job #1852606) | Cod sursa (job #30704)
Cod sursa(job #30704)
#include <stdio.h>
#define input "order.in"
#define output "order.out"
int n,lung,pz,i;
FILE *fout;
struct nod{int cati,nr; nod *st,*dr;} *prim,*q;
void citire()
{
FILE *fin;
fin=fopen(input,"r");
fscanf(fin,"%d",&n);
fclose(fin);
}
void creaza(nod *prim, int ls, int ld)
{
int k;
prim->cati=ld-ls+1;
if (prim->cati==1)
prim->nr=ls;
else
{
k=(int)((ls+ld)/2);
prim->nr=0;
q=new nod;
prim->st=q;
q=new nod;
prim->dr=q;
creaza(prim->st,ls,k);
creaza(prim->dr,k+1,ld);
}
}
void cauta(nod *prim, int pozitie)
{
if (prim->nr>0)
{
fprintf(fout,"%d ",prim->nr);
prim->cati--;
prim->nr=0;
}
else
{
prim->cati--;
if (prim->st->cati>=pozitie) cauta(prim->st,pozitie);
else cauta(prim->dr,pozitie-prim->st->cati);
}
}
void rsd(nod *prim)
{
if (prim->nr) fprintf(fout,"%d\n",prim->nr);
else
{
rsd(prim->st);
rsd(prim->dr);
}
}
int main()
{
citire();
prim=new nod;
creaza(prim,1,n);
fout=fopen(output,"w");
pz=2;
lung=n;
for (i=1;i<n;i++)
{
pz=(pz-1+i)%lung;
if (pz==0) pz=lung;
lung--;
cauta(prim,pz);
}
pz=pz;
cauta(prim,1);
// rsd(prim);
fclose(fout);
return 0;
}