hola Alexhg42, estuve viendo el enunciado y me parecio divertido asi que he hecho el programa a mi manera, y es que si entra en una hoja prefiero hacerlo sin funciones innecesarias, siento no haber mirado que es lo que no va en el tuyo, pero por si te sirve algo del mio, te lo envio
Código c:
Ver original#include <stdio.h>
#include <stdlib.h>// ruleta rusa
typedef struct Nodo { int dato; struct Nodo * sig; } tipoNodo;
int main()
{//----------------------------------------------------------- definiciones ---
int locos, vivos, salto, avanza;
tipoNodo *lista, *n_anterior, *n_trabajo;
//-------------------------------------------------------- entrada de datos ---
printf("\nIntroduce el número de participantes\t"); printf("\nIntroduce el número de saltos\t"); //-------------------------------------------------------- inicializaciones ---
avanza=salto;
vivos=locos;
lista
=(tipoNodo
*)malloc(locos
*(sizeof(tipoNodo
)));//..........creo el array if(!lista){
printf("\nno hay memoria libre\n"); return 1;
}
n_anterior=lista;
for(int i=locos-1; 0<=i; i--){//....................... inicializo el array
lista[i].dato=i+1;
lista[i].sig=n_anterior;
n_anterior=&lista[i];
}
n_trabajo=lista;
n_anterior=&lista[locos-1];
//---------------------------------------------------------------- programa ---
for(int i=1; i<locos; i++){ //tiene que quedar uno
if(avanza>=vivos) avanza=salto%vivos; //cuento sin vuleltas
for(int j=0; j<avanza; j++){ //paso de uno en uno
n_anterior=n_trabajo;
n_trabajo=n_trabajo->sig;
}
printf("\nha muerto el loco numero; %i ", n_trabajo
->dato
); n_anterior->sig=n_trabajo->sig; //se suicida
vivos--;
n_trabajo=n_trabajo->sig; //el sig coge la pistola
}
//------------------------------------------------ sobreviviente encontrado ---
printf("\n\nha sobrevivido el loco nº %i \n\n", n_trabajo
->dato
); return 0;
}
tambien lo hice sin utilizar directamente la memoria dinamica es decir sin reservar memoria (ni malloc) ni liberarla (ni free).