Pagini recente » Cod sursa (job #2135509) | Cod sursa (job #2428393) | Cod sursa (job #2335252) | Cod sursa (job #1720799) | Cod sursa (job #584918)
Cod sursa(job #584918)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
struct joc
{
int nr;
joc *next;
joc *anterior;
};
joc *cap = NULL, *ultim = NULL;
FILE *f,*g;
int insert(int nr);
joc* elimina(joc *e);
void afiseaza(joc *e);
void game(int z);
int main()
{
f = fopen("order.in","r");
if ( f == 0 )
return -1;
g = fopen("order.out","w");
int z,i;
fscanf(f,"%d",&z);
for (i=1;i<=z;i++)
insert(i);
game(z);
fclose(f);
fclose(g);
return 0;
}
void game(int z)
{
int n,i,k,m=z;
joc *p=cap,*p1;
n = 0;
p1 = p;
k = n;
while ( cap != NULL )
{
n++;
k = n;
if ( n > m && m > 0 )
k = k%m;
for (i=0;i<k;i++)
{
p1 = p1->next;
}
p1 = elimina(p1);
if ( p1 != 0 )
p1 = p1->anterior;
m--;
}
}
void afiseaza(joc *e)
{
fprintf(g,"%d",e->nr);
}
joc* elimina(joc *e)
{
joc *l;
if ( e->next == e )
{
afiseaza(e);
free(e);
cap = 0;
return 0;
}
if ( e == cap )
{
cap = cap->next;
cap->anterior = ultim;
}
e->anterior->next = e->next;
e->next->anterior = e->anterior;
l = e->anterior->next;
afiseaza(e);
fprintf(g," ");
free(e);
return l;
}
int insert(int nr)
{
joc *in;
in = (joc *)malloc(sizeof(joc));
in->nr = nr;
if ( cap == NULL )
{
cap = in;
ultim = in;
in->next = in;
in->anterior = in;
return 1;
}
ultim->next = in;
in->anterior = ultim;
in->next = cap;
ultim = in;
cap->anterior = ultim;
return 0;
}