domingo, 26 de marzo de 2017

Sobre el acertijo de las bolas de billar




Hace relativamente poco he encontrado un acertijo matemático en el que se proponia seleccionar tres bolas de billar de una lista,cuyos números debían sumar 30, debajo os dejo el enlace:

https://matematicascercanas.com/2017/03/25/solucion-acertijo-tres-bolas-suman-30/

pués bien me puse manos a la obra y que es lo que veo :

los siguientes números: (1, 3, 5, 7, 9, 11, 13, 15, 17 ), de los cuales tres deben de dar 30, todos son impares, como no noy matemático puro, pues comenzamos a analizar el problema.
Hay que tomar grupos de tres números de un grupo de 9, lo que hace 9!/((9-3)!x3!), lo que nos da 84 posibles combinaciones, hay que ordenarlas, y calcular, pero claro esto nos lleva un rato.

Por lo que vamos a programarnos la busqueda de estar ternas, sumarlas y comprobar si nos sale 30 ¿?, para no complicarnos nucho usamos C, concretamente la versión que viene en la última versión de Visual Studio (realmente es C++).

El código no es ninguna maravilla, pero ahí os lo dejo


// el problema del billar

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


int main(void)
{

    int n1;
    int n2;
    int n3;
    int suma;
    int numeros[9] = { 1, 3, 5, 7, 9, 11, 13, 15 };
    int contador = 0;

       
    for (int k = 0; k <= 6; k++)
    {
        n1 = numeros[k];

        for (int j = k + 1; j <= 7; j++)
        {
            n2 = numeros[j];
           
            for (int i = j + 1; i <= 8; i++)
            {
                n3 = numeros[i];
                suma = n1 + n2 + n3; // suma de los tres valores
                printf("los valores son %d %d %d y la suma %d\n", n1, n2, n3, suma);
                if (suma == 30)
                {
                    printf("fin de calculo\n");
                    getchar();
                    return(0);
                }
                contador++;
            }
        }
    }

        printf("NO se han encontrado los numeros\n");
        printf("El numero de calculos es %d\n", contador);
        printf("pulsa una tecla para terminar \n");
        getchar();
        return(0);


    }

Lo mejor de todo es lo que viene ahora, si ejecutais el programa

El problema con el planteamiento dado, NO TIENE SOLUCIÓN

Y claro esto te deja con la duda ¿y como es posible?, si se han usado todas las ternas, algo se escapa

Me pongo a mirar en la página en la que se plantea el problema y resulta que hay que darle la vuelta a a bola del 9 y convertirla en un 6, los que no hemos jugado al billar no  sabemos que las dos bolas son distintas, tienen distinta distribución de pintura y distinto color.

Resultado de imagen de bola de billar 9
Resultado de imagen de bola de billar 6 

 

La bola que aparece en el acertijo es un 9 no un 6 como parece, por lo que aclararo esto hay que cambiar la línea
int numeros[9] = { 1, 3, 5, 7, 9, 11, 13, 15 };
por
int numeros[9] = { 1, 3, 5, 7, 6, 11, 13, 15 };
 y ya si sale la terna :

[6,11,13] ahora si tiene solución.

Aparte de matemáticas y programación hay que saber billar (por lo menos las normas)