domingo, 10 de septiembre de 2017

Sobre el acertijo P-Q-R


No hace mucho me tropecé en la red Google+, con un acertijo, cuyo enunciado es:

Si p, q y r son números enteros positivos, entonces cuál es el valor de cada uno de ellos si también cumplen:

 
 A primera vista tenemos una ecuación con tres incognitas ??, nos faltarían otras dos ecuaciones, bueno que datos tenemos:
  • La ecuación de la imagen
  • Una condición que dice que p,q,r son numeros enteros positivos
La solución está a la derecha de la ecuación y modificando la expresion de la izquierda:


 Por lo que las soluciones serían:
p=1
r=6
q=3

Saludos

sábado, 2 de septiembre de 2017

Sobre el problema de la edad de Augustus de Morgan






Augustus de Morgan (1806-1871), fue un matemático extraordinariamente productivo ,escribió un gran número de artículos y libros sobre Matemática, y Filosofía.
Se cuenta en el libro ¿Es Dios un Matemático",  en el capítulo 7, Lógicos:  Pensar sobre el Razonamiento, de Mario Livio, que describe que una vez le preguntaron la edad a Augustus de Morgan y este respondio, " Tenía x años en el año x^2", en el siguiente párrafo del libro se indic que la edad era 43 años.
Teniendo en cuenta que la afirmacion la  realizó en el siglo XIX, tenemos lo siguiente:

  • Si estamos en el siglo XIX el año inicial y el final son 1800 y 1890.
  • Las raices cuadradas de cada uno de estos años es 42,43 y 43,58
  • La edad por lo tanto ha de estar entre estos dos números
  • Las edades se toman en números enteros (los años son números enteros)
  • El único número entero entre 42,43 y 43,58 es 43.
  • La edad sería por lo tanto 43 años
  • El año será 43^2=1849
  • Por lo tanto en 1849 tenía 43 años
  • El año de nacimiento sería 1806
Para el caso de que el año esté en el siglo XX, tenemos:

  • Si estamos en el siglo XX el año inicial y el final son 1900 y 1999.
  • Las raices cudradas de cada uno de estos años es 43,50 y 44,71
  • La edad por lo tanto ha de estar entre estos dos números
  • Las edades se toman en números enteros (los años son números enteros)
  • El único número entero entre 43,50 y 44,71 es 44.
  • La edad sería por lo tanto 44 años
  • El año será 44^2=1936
  • Por lo tanto en 1936 tenía 44 años
  • El año de nacimiento sería 1892
 Y en el caso de que lo diga alguién en el siglo XXI

  • Si estamos en el siglo XXI el año inicial y el final son 2000 y 2099.
  • Las raices cudradas de cada uno de estos años es 44,72 y 45,81
  • La edad por lo tanto ha de estar entre estos dos números
  • Las edades se toman en números enteros (los años son números enteros)
  • El único número entero entre 44,72 y 45,81 es 45.
  • La edad sería por lo tanto 45 años
  • El año será 45^2=2025
  • Por lo tanto en 2025 tenía 45 años
  • El año de nacimiento sería 1981

He encontrado en la red soluciones usando artillería pesada, como por ejemplo programación lineal

Os dejo un código en C++ en el que puede resolver el problema para varios siglos
Teniendo en cuenta que el siglo corresponde al que se hace la afirmación.

#include <stdio.h>
#include<math.h>
#include<conio.h>


int main()
{

    // declaracion de variables
    int siglo; // siglo en el que quiere calcular el año
    int a_menor;// año menor del siglo
    int a_mayor; // año mayor del siglo
    // raices de los años
    float raiz_menor;
    float raiz_mayor;
    int winner;

    // introduccion de los datos
    printf("Introduce el siglo en que se hace la afirmación ");
    scanf("%i", &siglo);

    a_menor = (siglo - 1)*100;
    a_mayor = a_menor +99;

    raiz_menor = sqrt(a_menor);
    raiz_mayor = sqrt(a_mayor);


    printf("El siglo elegido es  %i \n", siglo);
    printf("El inicio del siglo es  %i \n", a_menor);
    printf("El fin del siglo es  %i  \n", a_mayor);

    printf("La edad buscada está entre %.2f y %.2f \n", raiz_menor,raiz_mayor);

    winner = (int)raiz_mayor;

    printf("El año es  %.0f y la edad es %i \n", pow(winner,2),winner);
    // aqui la verdad he simplificado

   
    // parada del programa para ver los resultados
    fflush(stdin);
    printf("Pulsa una tecla para terminar");
    getche();
   
    return 0;
}

El código se podía simplificar más pero he creido conveniente desarrollarlo un poco y comentarlo

El código en Python 3.0  sería:



# programa para la solucion del problema de Solucion al problema de en el año x^2 tendre x años
# Introduce el siglo en que se hace la afirmacion

import math

siglo=int(input("Siglo en el que se hace la afirmacion = "))

a_menor = (siglo - 1)*100
a_mayor = a_menor +99

print("El siglo elegido es  %d "%(siglo))
print("El inicio del siglo es  %d"%a_menor)
print("El inicio del siglo es  %d"%a_mayor)

raiz_menor=math.sqrt(a_menor)
raiz_mayor=math.sqrt(a_mayor)
winner = int(raiz_mayor)

print("La edad buscada está entre %.2f y %.2f " %(raiz_menor, raiz_mayor));
print("El año es  %.d y la edad es %d " %(winner**2, winner))