Cod sursa(job #584916)

Utilizator lichMarin Cristian lich Data 27 aprilie 2011 09:01:50
Problema Order Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
#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;
	bool v = true;
	
	n = 0;
	p1 = p;
	
	while ( cap != NULL )
	{
		n++;
		
		
		k = n;
		
		for (i=0;i<k;i++)
		{
			p1 = p1->next;
		}
		p1 = elimina(p1);
		if ( p1 != 0 )
			p1 = p1->anterior;
		m--;
		if ( n > m && m > 0 )
			n = n%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;
}