Skip to content

Adelgazando después de Navidad

by en 13/01/2014

¡Hola!

Las Navidades suelen ser una época de celebraciones, lo que incluye múltiples comidas y cenas que terminan afectando a nuestra linea 🙂

El otro día nos encontramos con un amigo que, claramente, había cogido algunos kilillos de más, y se le notaba bastante preocupado. Le preguntamos cuánto pesaba y no nos lo quiso decir… en su lugar, nos respondió con un acertijo, pues también él es un gran aficionado a ellos.

Nos dijo que tenía que perder tantos kilos como su peso actual quitándole el último dígito de la derecha (por ejemplo, si pesara 90 kilos, tendría que perder 9). También añadió que su objetivo era quedarse en 65.

¿Cuánto pesa tras las Navidades? ¿Y si el objetivo hubiera sido 75? ¿Y 81?

Y… si nos olvidamos de los kilos (o tuviéramos como amigos a toros, elefantes y ballenas azules) ¿cual es la respuesta para 500, 900 o 12.345?

Si das con la solución ¡cuéntanosla en los comentarios! Y si la programas y la quieres probar, puedes hacerlo aquí.

¡Hasta el domingo!

Anuncios

From → Fáciles, Problemas

10 comentarios
  1. Gualterio permalink

    ¡Soy el primero! 🙂
    Creo que tengo las respuestas:
    – Para 65, son 72.
    – Para 75 son 83.
    – Para 81 son 90.
    – Para 500 son 555.
    – Para 900 son 1000.
    – Para 12345 son 13716.

    Saludos!

  2. David permalink

    Para 81, también valdría 89.
    Para 900, también valdría 999

    Adjunto un algoritmo algo liado =)
    http://www.codeskulptor.org/#user28_mxpaJZRnza0lxgH.py

  3. Gualterio permalink

    Sí, me dí cuenta después! (al ver el enlace a la UVa)
    Mi método no usa bucles… Es algo así como coger el número que te dan, multiplicarlo por 10 y dividirlo por 9 (división entera). Ese método te da los resultados de mi primer comentario.
    Y hay otra solución más si la respuesta termina en 0. En ese caso, también es válido la respuesta-1.

  4. Oscar permalink

    Por alguna razón, yo en mi ordenador consigo resultados inferiores a 1 segundo, pero al comprobarlo me da siempre un runtime error, supongo que por que tarda más del segundo limite que dan. No entiendo que puede pasar y por que a mi me da tiempos inferiores a un segundo y aún así no me lo aceptan..

    ¿A alguien le pasa algo así?

    Para la segunda respuesta vale con un if para cuando el resultado se un número seguido de x ceros, para esos casos la segunda solucion es (n*10/9)-1.

    • Hola Oscar,

      Un Runtime error no significa que tu respuesta tarde mucho, sino que acaba de manera precipitada por algún error; algo así como un “pantallazo azul” de tu programa.
      Si has hecho tu solución en Java, eso se suele deber a que salta alguna excepción. Si las has programado en C/C++, quizá estás accediendo a alguna posición incorrecta de memoria, tienes algún problema de división en coma flotante o, sencillamente, has olvidado el return 0 en el main. Tienes la información sobre el significado de los veredictos en http://uva.onlinejudge.org/index.php?option=com_content&task=view&id=16&Itemid=31

      Cuando ocurren cosas así, una posibilidad es probar tu programa con muchos casos de prueba. En este caso, puedes hacerte un programa rápidamente que escriba todos los números del 10 al 1.000.000 (añade el 0 del final para marcar el final de la entrada), grabarlos a un fichero, y enviárselos a tu programa para ver qué ocurre…

      Suerte! Y ya nos contarás 🙂

      • Oscar permalink

        Ya lo he hecho, me da todos los números correctos, pero me da un wrong answer, a pesar de que los datos que da son correctos, de menor a mayor en el caso de dos soluciones, un solo espacio entre ellos, etc… Me estoy desesperando y ya no sé que más probar!! Por que el programa se supone que está funcionando.

      • ¡Hola otra vez!

        Sí, aunque se entienda cómo se resuelve, luego el juez on-line puede ser realmente pijotero y resultar un tanto molesto 🙂

        Es difícil darte alguna pista a ciegas… Ante un Wrong answer, si estás convencido de que tu solución está bien, hay que mirar los detalles que se te pueden estar escapando. En el caso de este problema, uno de esos detalles son los límites. Fíjate que el enunciado dice que la entrada estará entre 10 y 10^18. Eso es un número muuuuy grande, que no entra en un entero normal (hay que usar enteros largos). En concreto, para la entrada “1000000000000000000” (la más alta posible según el enunciado) tu programa debería responder “1111111111111111111”. Hay que pensar que si el enunciado pone un tamaño máximo de la entrada seguro que el juez prueba con ella 🙂

        No sé si los tiros irán por ahí, pero no se me ocurre mucho más sin ver el código.

        Suerte!

      • Oscar permalink

        Me has salvado la vida 🙂 Los últimos números si entraban en el tamaño de la variable que usaba, pero no así la solución. Al final he tenido que usar BigInteger a costa de perder espacio y memoria.

        Mira que había probado hasta 10 ^ 12 desde 100 pero bueno… fallo estúpido como ya me imaginaba. 🙂

      • 🙂
        Sí, muchas veces los límites de la entrada se escogen para incordiar. ¡Hay que pensar en todo al resolverlos! 😉 Según cómo sea tu solución, quizá podrías resolverlo sin recurrir al BigInteger teniendo cuidado del orden. Si multiplicas por 10 y divides por 9, puedes probar a hacerlo en el orden contrario, dividiendo primero, porque 10^18 entra en un entero largo pero 10^19 ya no. En cualquier caso, depende de cómo lo hayas programado, claro, y si necesitas que la división sea o no entera 🙂

        Enhorabuena por conseguirlo 🙂

      • Oscar permalink

        Si, si ya lo hice sin el BigInteger, simplemente poniendo el *10/9 como *(10/9) por la razón que acabas de poner ^^

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: