elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda Lista Enlazada
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda Lista Enlazada  (Leído 5,807 veces)
robluis

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Ayuda Lista Enlazada
« en: 8 Mayo 2012, 18:36 pm »

Alguien me puede ayudar a realizar este programa en c++ utilizado listas enlazadas gracias!!

 Un verdugo es mandado a exterminar a n prisioneros de guerra. El exterminio lo ejecuta de la siguiente manera: los prisioneros forman un círculo alrededor del verdugo, el verdugo elige a quien fusilar primero, el verdugo cuenta, a partir del lugar donde estaba su última víctima, k prisioneros en orden de las manecillas del reloj y luego fusila al k-esimo prisionero después de su última víctima (a los muertos no los cuenta), y repite este proceso hasta que solo quede un prisionero.
El último prisionero podrá ser liberado.
El verdugo tiene un amigo entre los n prisioneros, escribe un programa que dado, n, k y la ubicación de su amigo, le diga a quien fusilar primero, para asegurar que su amigo sea el que quede libre.


En línea

xiruko


Desconectado Desconectado

Mensajes: 438


Ver Perfil
Re: Ayuda Lista Enlazada
« Respuesta #1 en: 8 Mayo 2012, 18:44 pm »

aqui no se hacen tareas!

aunque esta guapo el ejercicio me lo apunto para hacerlo cuando acabe examenes.. xD


En línea

s00rk

Desconectado Desconectado

Mensajes: 195



Ver Perfil
Re: Ayuda Lista Enlazada
« Respuesta #2 en: 8 Mayo 2012, 21:39 pm »

aqui no se hacen tareas!

aunque esta guapo el ejercicio me lo apunto para hacerlo cuando acabe examenes.. xD

De hecho el ejercicio se ve interesante igual luego intentare hacerlo, aunque como ya te dijeron aqui no se hacen tareas, pon lo que llevas de codigoy asi poder ayudarte en lo que podamos.
En línea

flony


Desconectado Desconectado

Mensajes: 584



Ver Perfil
Re: Ayuda Lista Enlazada
« Respuesta #3 en: 9 Mayo 2012, 03:00 am »

lindo ejercicio lo anoto
En línea

si un problema no tiene solucion entonces no es un problema...es algo inevitable
s00rk

Desconectado Desconectado

Mensajes: 195



Ver Perfil
Re: Ayuda Lista Enlazada
« Respuesta #4 en: 9 Mayo 2012, 03:44 am »

Bueno al final ya lo hice aunque por alguna razon no me anda bien en algunos casos aun asi ahi quien puda ayudar o nose >__<

Código
  1.  
  2. #include <iostream>
  3. #include <cstdlib>
  4.  
  5. using namespace std;
  6.  
  7. typedef struct _nodo
  8. {
  9.    int dato;
  10.    struct _nodo *siguiente;
  11. } tiponodo;
  12.  
  13. typedef tiponodo *pnodo;
  14. typedef tiponodo *Lista;
  15.  
  16. void agregarPrisionero(Lista *l, int v);
  17. void mostrarPrisioneros(Lista lista);
  18. void fusilarPrisioneros(Lista *lista, int k, int n);
  19. int getAmigo(int n, int k);
  20.  
  21. int main()
  22. {
  23.    int n, k;
  24.    cout << "Total de Prisioneros? ";
  25.    cin >> n;
  26.    cout << "Cada cuantos Prisioneros fusila? ";
  27.    cin >> k;
  28.    Lista lista = NULL;
  29.    cout << "Su amigo es el numero " << getAmigo(n, k) << endl;
  30.    for(int i = 0; i < n; i++)
  31.        agregarPrisionero(&lista, i);
  32.    cout << "Mostar Prisioneros: " << endl;
  33.    mostrarPrisioneros(lista);
  34.    //for(int x = 0; x < (n-1); x++)
  35.    fusilarPrisioneros(&lista, k, n);
  36.    cout << "Mostar Sobreviviente: " << endl;
  37.    mostrarPrisioneros(lista);
  38.    return 0;
  39. }
  40.  
  41. int getAmigo(int n, int k)
  42. {
  43.    int v = -1, tam = n, y = 1;
  44.    int amigo[n];
  45.    amigo[0] = 0;
  46.    for(int x = (n-1); x > 0; x--)
  47.    {
  48.        amigo[x] = y;
  49.        y++;
  50.    }
  51.  
  52.    while(tam > 1)
  53.    {
  54.        for(y = 0; y < k; y++)
  55.        {
  56.            v++;
  57.            while(v == n || amigo[v] == n)
  58.            {
  59.                if(v == n)
  60.                    v = 0;
  61.                else
  62.                    v++;
  63.            }
  64.        }
  65.        amigo[v] = n;
  66.        tam--;
  67.    }
  68.  
  69.    for(int x = 0; x < n; x++)
  70.        if(amigo[x] != n)
  71.            return amigo[x];
  72.  
  73.    return 0;
  74. }
  75.  
  76. void agregarPrisionero(Lista *lista, int v)
  77. {
  78.    pnodo nodo;
  79.    nodo = (pnodo)malloc(sizeof(tiponodo));
  80.    nodo->dato = v;
  81.    if(*lista == NULL)
  82.        *lista = nodo;
  83.    else
  84.        nodo->siguiente = (*lista)->siguiente;
  85.    (*lista)->siguiente = nodo;
  86. }
  87.  
  88. void fusilarPrisioneros(Lista *lista, int k, int n)
  89. {
  90.    pnodo nodo;
  91.    nodo = *lista;
  92.  
  93.    for(int x = 0; x < (k-2); x++)
  94.    {
  95.        *lista = (*lista)->siguiente;
  96.    }
  97.    if(*lista == (*lista)->siguiente)
  98.    {
  99.        free(*lista);
  100.        *lista = NULL;
  101.    }else{
  102.        nodo = (*lista)->siguiente;
  103.        (*lista)->siguiente = nodo->siguiente;
  104.        free(nodo);
  105.    }
  106.    if(n > 2)
  107.    {
  108.        *lista = (*lista)->siguiente;
  109.        fusilarPrisioneros(lista, k, n-1);
  110.    }
  111. }
  112.  
  113. void mostrarPrisioneros(Lista lista)
  114. {
  115.    pnodo nodo = lista;
  116. do{
  117.   cout << nodo->dato << " ";
  118.   nodo = nodo->siguiente;
  119. } while(nodo != lista);
  120. cout << endl;
  121. }
  122.  
En línea

botella

Desconectado Desconectado

Mensajes: 80


Ver Perfil
Re: Ayuda Lista Enlazada
« Respuesta #5 en: 9 Mayo 2012, 03:49 am »

El ejercicio está muy bueno, yo te diría que te olvides de la lista enlazada y lo plantees primero. Igual, sabé que un prisionero apunta al de al lado y así sucesivamente, cada vez que matás a uno, el de la izquiera pasa a apuntar al siguiente luego del muerto, (el más próximo que queda vivo a la derecha). Al muerto le das un free para liberar la memoria que tenía con malloc.  El último prisionero apunta al primero. Plantealo en papel tranquilo, no es muy dificil.

Una vez que tenés bién la estructura de datos, de los prisioneros apuntandosé, tenés que hacer la función que mate al prisionero. De ahí en más empezas a buscar el algoritmo para no matar al amigo. Sabés listas?, si no sabés mandame un mp con tu e-mail que te puedo enviar las primitivas de listas y unos tutoriales. Saludos.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
una lista circular doblemente enlazada en c sharp c#
.NET (C#, VB.NET, ASP)
neo_angel_xxx 2 9,421 Último mensaje 29 Octubre 2010, 01:48 am
por [D4N93R]
ayuda con lista doblemente enlazada
Programación C/C++
gibi77 3 3,943 Último mensaje 7 Marzo 2012, 07:47 am
por nirvguy
Problema con free, lista enlazada
Programación C/C++
totolia 1 2,348 Último mensaje 3 Abril 2012, 21:01 pm
por durasno
Ayuda con lista enlazada
Java
netca 2 3,371 Último mensaje 20 Abril 2012, 16:11 pm
por adwind
problema con funcion insertar de una lista enlazada
Programación C/C++
roger13 0 2,235 Último mensaje 20 Octubre 2013, 01:44 am
por roger13
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines