[ create a new paste ] login | about

Link: http://codepad.org/QBv8b84X    [ raw code | output | fork ]

C, pasted on Apr 28:
/* PRESOS.C
 * PRESOS Y SOMBREROS
 * Los presos se representan como una tabla de enteros que podra
 * tener dos valores: 0-sombrero blanco, o 1-sombrero negro.
 * La elección de cada preso se representa como otra tabla de
 * enteros siguiendo la misma codificación.
 */

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>

int i,j,oidos,vistos;

int sombrero[31];
int eleccion[31];

int salvados;
int ejecutados;

main() {
   printf("PRESOS Y SOMBREROS\n");
   printf("Codificacion: 0-blanco 1-negro\n");

   Repartir_sombreros();
   Aplicar_estrategia();
   Mostrar_resultado();
}

Repartir_sombreros() {
   /* Aleatoriamente se asignan sobreros a cada uno de los 30 presos. */

   printf("Repartiendo sombreros...\n");

   srand(time(0));
   for (i=1; i<=30; i++) {
      sombrero[i]= rand()%2;
      printf("%i",sombrero[i]);
   }
   printf("\n");
}

Aplicar_estrategia() {
   /* Recorriendo la lista del 1 al 30, la estrategia para cada preso es:
    * - escuchar el sombrero del primer preso y decodificarlo
    *      -si dijo blanco, ha visto un n£mero par de sombreros
    *      -si dijo negro, ha visto un n£mero impar de sombreros
    * - llevar la cuenta de los sombreros negros que han ido diciendo sus
    *   compa¤eros, quitando el primero, que habr n ido acertando.
    * - si la suma de los que ha oido mas los que ve es del mismo orden
    *   (par o impar) que los que vio el primer preso, entonces
    *       elegir blanco
    * -sino
    *       elegir  negro
    */

   printf("Aplicando estrategia (relativa a sombreros negros)...\n");
   printf("Eleccion:\n");

   vistos=0;
   for (i=2; i<=30; i++) {
       vistos=vistos+sombrero[i];
   }
   eleccion[1]=vistos%2;
   printf("El preso  1 ve %2i sombreros, y elige %i.\n",
	   vistos,eleccion[1]);

   for (i=2; i<=30; i++) {
      oidos=0;
      for (j=2; j<i; j++) {
         oidos=oidos+sombrero[j];
      }
      vistos=0;
      for (j=i+1; j<=30; j++) {
         vistos=vistos+sombrero[j];
      }
      if ((oidos+vistos)%2==eleccion[1])
         eleccion[i]=0;
      else
         eleccion[i]=1;

      printf("El preso %2i lleva contados %2i sombreros y ve %2i sombreros, luego elige %i.\n",
	      i,oidos,vistos,eleccion[i]);
   }
}

Mostrar_resultado() {
   /* Se muestra el resultado comparando las respuesta de cada preso con el sombrero que
    * lleva, indicando si coincide (y se salva) o no (y le matan).
    */

   printf("Mostrando resultado...\n");

   salvados=0;
   ejecutados=0;

   for (i=1; i<=30; i++) {
      printf("El preso %2i ha elegido %i y su sombrero era %i",i,eleccion[i],sombrero[i]);
      if (eleccion[i]==sombrero[i])
      {
	 printf(", luego se salva.\n");
	 salvados++;
      }
      else
      {
	 printf(", luego le matan.\n");
	 ejecutados++;
      }
   }
   printf("Se han salvado %i y han ejecutado a %i.\n",salvados,ejecutados);
   return 0;
}


Output:
PRESOS Y SOMBREROS
Codificacion: 0-blanco 1-negro
Repartiendo sombreros...
101101101011111111110110101101
Aplicando estrategia (relativa a sombreros negros)...
Eleccion:
El preso  1 ve 21 sombreros, y elige 1.
El preso  2 lleva contados  0 sombreros y ve 21 sombreros, luego elige 0.
El preso  3 lleva contados  0 sombreros y ve 20 sombreros, luego elige 1.
El preso  4 lleva contados  1 sombreros y ve 19 sombreros, luego elige 1.
El preso  5 lleva contados  2 sombreros y ve 19 sombreros, luego elige 0.
El preso  6 lleva contados  2 sombreros y ve 18 sombreros, luego elige 1.
El preso  7 lleva contados  3 sombreros y ve 17 sombreros, luego elige 1.
El preso  8 lleva contados  4 sombreros y ve 17 sombreros, luego elige 0.
El preso  9 lleva contados  4 sombreros y ve 16 sombreros, luego elige 1.
El preso 10 lleva contados  5 sombreros y ve 16 sombreros, luego elige 0.
El preso 11 lleva contados  5 sombreros y ve 15 sombreros, luego elige 1.
El preso 12 lleva contados  6 sombreros y ve 14 sombreros, luego elige 1.
El preso 13 lleva contados  7 sombreros y ve 13 sombreros, luego elige 1.
El preso 14 lleva contados  8 sombreros y ve 12 sombreros, luego elige 1.
El preso 15 lleva contados  9 sombreros y ve 11 sombreros, luego elige 1.
El preso 16 lleva contados 10 sombreros y ve 10 sombreros, luego elige 1.
El preso 17 lleva contados 11 sombreros y ve  9 sombreros, luego elige 1.
El preso 18 lleva contados 12 sombreros y ve  8 sombreros, luego elige 1.
El preso 19 lleva contados 13 sombreros y ve  7 sombreros, luego elige 1.
El preso 20 lleva contados 14 sombreros y ve  6 sombreros, luego elige 1.
El preso 21 lleva contados 15 sombreros y ve  6 sombreros, luego elige 0.
El preso 22 lleva contados 15 sombreros y ve  5 sombreros, luego elige 1.
El preso 23 lleva contados 16 sombreros y ve  4 sombreros, luego elige 1.
El preso 24 lleva contados 17 sombreros y ve  4 sombreros, luego elige 0.
El preso 25 lleva contados 17 sombreros y ve  3 sombreros, luego elige 1.
El preso 26 lleva contados 18 sombreros y ve  3 sombreros, luego elige 0.
El preso 27 lleva contados 18 sombreros y ve  2 sombreros, luego elige 1.
El preso 28 lleva contados 19 sombreros y ve  1 sombreros, luego elige 1.
El preso 29 lleva contados 20 sombreros y ve  1 sombreros, luego elige 0.
El preso 30 lleva contados 20 sombreros y ve  0 sombreros, luego elige 1.
Mostrando resultado...
El preso  1 ha elegido 1 y su sombrero era 1, luego se salva.
El preso  2 ha elegido 0 y su sombrero era 0, luego se salva.
El preso  3 ha elegido 1 y su sombrero era 1, luego se salva.
El preso  4 ha elegido 1 y su sombrero era 1, luego se salva.
El preso  5 ha elegido 0 y su sombrero era 0, luego se salva.
El preso  6 ha elegido 1 y su sombrero era 1, luego se salva.
El preso  7 ha elegido 1 y su sombrero era 1, luego se salva.
El preso  8 ha elegido 0 y su sombrero era 0, luego se salva.
El preso  9 ha elegido 1 y su sombrero era 1, luego se salva.
El preso 10 ha elegido 0 y su sombrero era 0, luego se salva.
El preso 11 ha elegido 1 y su sombrero era 1, luego se salva.
El preso 12 ha elegido 1 y su sombrero era 1, luego se salva.
El preso 13 ha elegido 1 y su sombrero era 1, luego se salva.
El preso 14 ha elegido 1 y su sombrero era 1, luego se salva.
El preso 15 ha elegido 1 y su sombrero era 1, luego se salva.
El preso 16 ha elegido 1 y su sombrero era 1, luego se salva.
El preso 17 ha elegido 1 y su sombrero era 1, luego se salva.
El preso 18 ha elegido 1 y su sombrero era 1, luego se salva.
El preso 19 ha elegido 1 y su sombrero era 1, luego se salva.
El preso 20 ha elegido 1 y su sombrero era 1, luego se salva.
El preso 21 ha elegido 0 y su sombrero era 0, luego se salva.
El preso 22 ha elegido 1 y su sombrero era 1, luego se salva.
El preso 23 ha elegido 1 y su sombrero era 1, luego se salva.
El preso 24 ha elegido 0 y su sombrero era 0, luego se salva.
El preso 25 ha elegido 1 y su sombrero era 1, luego se salva.
El preso 26 ha elegido 0 y su sombrero era 0, luego se salva.
El preso 27 ha elegido 1 y su sombrero era 1, luego se salva.
El preso 28 ha elegido 1 y su sombrero era 1, luego se salva.
El preso 29 ha elegido 0 y su sombrero era 0, luego se salva.
El preso 30 ha elegido 1 y su sombrero era 1, luego se salva.
Se han salvado 30 y han ejecutado a 0.


Create a new paste based on this one


Comments: