Dev - C++ - Problema de josephus

 
Vista:
sin imagen de perfil

Problema de josephus

Publicado por paola (3 intervenciones) el 25/04/2013 23:22:26
hola!
esque tengo que hacer este programa, pero con listas!
y noc como hacerlo ...
alguien m puede ayudar?


gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Problema de josephus

Publicado por paola (3 intervenciones) el 29/04/2013 02:04:19
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include "iostream.h"
# include "conio.h"
# include "stdio.h"
#include <stdlib.h>
 
#define N 5
#define M 0
 
struct cel {
	int info;
	struct cel *prox;
};
 
typedef struct cel Celula;
 
void inserte (int, Celula **);
void mostrar_vencedor (Celula *);
void josephus (Celula **);
void encontrar (Celula **p);
void elimina (Celula **p);
 
int main () {
	int cont;
	Celula *persona = NULL;
	printf("%d personas.\n", N);
	printf("%d passes.\n", M);
	for (cont = 1; cont <= N; ++cont)
		inserte (cont, &persona);
	josephus (&persona);
	mostrar_vencedor (persona);
	return EXIT_SUCCESS;
}
 
void inserte (int num, Celula **p) {
	Celula *nodo;
    nodo = (Celula *) malloc (sizeof (Celula));
	nodo->info = num;
	if (*p == NULL) {
		*p = nodo;
		(**p).prox = *p;
	}
	else {
		Celula *temp = *p;
		while ((**p).prox != temp) {
			*p = (**p).prox;
		}
		(**p).prox = nodo;
		nodo->prox = temp;
		*p = temp;
	}
}
 
void josephus (Celula **p) {
	if (*p != NULL) {
		while (*p != (**p).prox) {
			encontrar (p);
			elimina (p);
		}
	}
}
 
void encontrar (Celula **p) {
	int cont = M;
	while (cont) {
		*p = (**p).prox;
		cont--;
	}
}
 
void elimina (Celula **p) {
	Celula *morta = *p;
	while ((**p).prox !=	morta) {
		*p = (**p).prox;
	}
	(**p).prox = (**p).prox->prox;
	*p = (**p).prox;
	free(morta);
}
 
void mostrar_vencedor (Celula *p) {
	if (p != NULL)
		printf ("vencedor : %d\n", p->info);
		getch();
}


tengo esto del programa :(
pero aun asi no m sirve!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar