Cod sursa(job #584884)

Utilizator lichMarin Cristian lich Data 26 aprilie 2011 22:12:02
Problema Order Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.55 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

struct joc
{
	int nr;
	joc *next;
};
joc *cap = NULL;
FILE *f,*g;

int insert(int nr);
joc* elimina(joc *e);
void afiseaza(joc *e);
void game();


void main()
{
	f = fopen("order.in","r");
	if ( f == 0 )
		return;
	g = fopen("order.out","w");
	
	int z,i;
	fscanf(f,"%d",&z);

	for (i=1;i<=z;i++)
		insert(i);

	game();

	fclose(f);
	fclose(g);
}

void game()
{
	int n,i;
	joc *p=cap,*p1;

	srand ( time(NULL) );
	
	n = rand()%3+1;
	//printf("Start: %d\n",n);
	p1 = p;
	
	while ( cap != NULL )
	{
		for (i=0;i<n;i++)
		{
			p1 = p1->next;
		}
		p1 = elimina(p1);
		n = rand()%3+1;
		//if ( cap != NULL )
		//	printf(" %d\n",n);
	}

	printf("\n");

}

void afiseaza(joc *e)
{

	fprintf(g,"%d ",e->nr);

}

joc* elimina(joc *e)
{
	joc *p,*p1,*l;

	if ( e->next == e )
	{
		afiseaza(e);
		//printf("End\n");
		free(e);
		cap = 0;
		return 0;
	}

	p = cap;
	while (1)
	{
		p1 = p;
		p = p->next;

		if ( p == e )
		{
			if ( e == cap )
			{
				cap = cap->next;
			}
			p1->next = p->next;
			l = p1->next;
			afiseaza(e);
			free(e);

			return l;

		}

	}


	return 0;
}

int insert(int nr)
{
	joc *p,*p1,*in;
	in = (joc *)malloc(sizeof(joc));
	in->nr = nr;
	
	if ( cap == NULL )
	{
		cap = in;
		in->next = in;
		return 1;
	}

	p = cap;

	do
	{
	p1 = p;
	p = p->next;
	
	if ( p == cap )
	{
		p1->next = in;
		in->next = p;
		return 1;
	}

	}
	while ( 1 );


	return 0;
}