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

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Ejercicios
| | | |-+  Programación algorítmica: unos problemillas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Programación algorítmica: unos problemillas  (Leído 13,148 veces)
ghastlyX
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.900



Ver Perfil
Programación algorítmica: unos problemillas
« en: 6 Septiembre 2008, 03:03 am »

A raíz de ver los problemas de ohk, me ha gustado la idea y voy a poner también algunos problemas, al mismo estilo de entrada-salida que en los concursos de programación.

Por ahora pondré un par, uno facilísimo (triangulos.pdf) y otro algo más complejo (minas.pdf), si veo que gusta ya me inventaré más de diferentes tipos.

Los pongo adjuntos en pdf. Sobre el primero no hay nada que decir, es muy sencillo, respecto al segundo, como pone en el enunciado, no se puede hacer recursivamente puesto que es muy lento, buscad otro tipo de solución más dinámica xDD

En cuanto a los lenguajes, que cada uno lo haga con aquel que use y lo postee, puesto que así no queda limitado a ningún lenguaje, poniendo comentarios para que el resto podamos entender que hace su programa si no conocemos el lenguaje. La solución la daré si es necesaria en pseudocódigo.

Un saludo de ghastlyX ;)


En línea

:ohk<any>


Desconectado Desconectado

Mensajes: 1.744


Yo lo que quiero que me salga bien es la vida.


Ver Perfil WWW
Re: Programación algorítmica: unos problemillas
« Respuesta #1 en: 6 Septiembre 2008, 04:37 am »

Hola :D

Hombre están buenos tus ejercicios, aunque el de las minas es mas complejo, por ahora voy a resolver el primero, espero no tardarme demasiado  :P

Un saludo

OHK


En línea

Y es que a veces pienso que si no estuviera loco no podría salir adelante.
Lo que no se es capaz de dar, en realidad no se posee, uno es poseído por ello.
GroK


Desconectado Desconectado

Mensajes: 681


...I have become comfortably numb...


Ver Perfil
Re: Programación algorítmica: unos problemillas
« Respuesta #2 en: 6 Septiembre 2008, 06:51 am »

Hola ;)

Me han parecido interesantes los ejercicios, voy a postear el primero, si te parece bien:

En C:

Código
  1. #include <stdio.h>
  2.  
  3. int main (void)
  4. {
  5. int i, j, n;
  6.  
  7. printf ("Introduce altura de la pared: ");
  8. scanf ("%d", &n);
  9. for (i = n; i >= 1; i--) { /* Bucle desde la cima hasta la base */
  10. j = i; /* 'j' servira para saber las veces que se repiten los numeros en cada nivel de la piramide */
  11. while (j <= n) {
  12. printf ("%d ", i); /* Imprimimos el numero del nivel... */
  13. j++;
  14. } /* ...tantas veces como niveles alejados de la cima estemos */
  15. printf ("\n");
  16. }
  17. printf ("\n");
  18. return 0;
  19. }



En Pascal:

Código
  1. PROGRAM Triangulos;
  2.  
  3. VAR
  4. i, j, n : Byte;
  5.  
  6. BEGIN
  7.  
  8. Write ('Introduce altura de la pared: ');
  9. ReadLn (n);
  10. For i := n DownTo 1 Do
  11. Begin
  12. j := i;
  13. While (j <= n) Do
  14. Begin
  15. Write (i, ' ');
  16. Inc (j);
  17. End;
  18. WriteLn ();
  19. End;
  20. WriteLn ();
  21.  
  22. END.



Igual se pueden optimizar algo mas, pero bueno... En cuanto pueda intentare el segundo tambien, a ver que tal

Gracias y saludos
En línea

"I put on my Hendrix album and my son said 'Dad, who's that?' and i said 'Well son, that's God' "- Robert Plant

ghastlyX
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.900



Ver Perfil
Re: Programación algorítmica: unos problemillas
« Respuesta #3 en: 6 Septiembre 2008, 14:08 pm »

Vale, el código está bien, aunque tal y como dije, la idea es que no pidas la entrada, tú simplemente has de hacer un programa que la reciba. Y por cierto, cuidado que has puesto espacios entre los números, eso en un concurso de programación te lo darían como mal. Aunque como lo importante es la idea y esta es correcta, el problema lo doy por resuelto. Si alguien quiere aportar más soluciones para este serán bievenidas. Ahora a por el de las minas :P

El primero en C++ lo tenía así, un poco más corto:
Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main()
  5. {
  6.    int n, i = 1;
  7.    cin >> n;  //Recogemos n
  8.    while(n) //Mientras n no sea cero
  9.    {
  10.            for(int k = 0; k < i; k++) cout << n;  //Imprimimos i veces n, para una i inicial de 1
  11.            i++; //Aumentamos en 1 i para el siguiente nivel
  12.            n--; //Disminuimos en 1 n
  13.            cout << endl; //Imprimimos un salto de línea
  14.    }
  15. }

Pero es lo mismo, la idea es como lo has hecho.

Un saludo de ghastlyX ;)
En línea

GroK


Desconectado Desconectado

Mensajes: 681


...I have become comfortably numb...


Ver Perfil
Re: Programación algorítmica: unos problemillas
« Respuesta #4 en: 6 Septiembre 2008, 16:48 pm »

Guay :D

Lo del espacio despues de los numeros lo puse deliberadamente, pensando que asi es mas legible... Pero bueno es igual, se quita y ya esta xD No sabia eso de los concursos, me lo apuntare

Ah, y me gusta tu codigo, te quedo mas corto, tiene estilo :P

Ahora a por el de las minas, como tu dices. Saludos


En línea

"I put on my Hendrix album and my son said 'Dad, who's that?' and i said 'Well son, that's God' "- Robert Plant

chrominum


Desconectado Desconectado

Mensajes: 567


Viceroy: No es lo que tengo, es COMO lo tengo


Ver Perfil WWW
Re: Programación algorítmica: unos problemillas
« Respuesta #5 en: 6 Septiembre 2008, 21:48 pm »

Mi solución en c# del ejercicio de los Triángulos:

Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4.  
  5. namespace Triangulos
  6. {
  7.    class TriangulosApp
  8.    {
  9.        static void Main(string[] args)
  10.        {
  11.            byte metros, nivel = 1, i;
  12.            Console.Write("Introduce los metros de la pared: ");
  13.            metros = Convert.ToByte(Console.ReadLine());
  14.            while (metros > 0 && metros < 10)
  15.            {
  16.                for (i = 0; i < nivel; i++)
  17.                    Console.Write(metros);
  18.                Console.WriteLine();
  19.                metros--;
  20.                nivel++;
  21.            }
  22.            Console.ReadKey();
  23.        }
  24.    }
  25. }

Y mi otra soluciona al problema de los triángulos haciendo uso de los RepUnit (para conseguir cogido mas corto):

Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4.  
  5. namespace TriangulosRepUnit
  6. {
  7.    class TriangulosRepUnitApp
  8.    {
  9.        static void Main(string[] args)
  10.        {
  11.            byte metros, nivel;
  12.            Console.Write("Introduce los metros de la pared: ");
  13.            metros = Convert.ToByte(Console.ReadLine());
  14.            for (nivel = 1; metros > 0 && metros < 10; nivel++)
  15.            {
  16.                Console.WriteLine((Math.Pow(10, nivel) - 1) / 9 * metros);
  17.                metros--;
  18.            }
  19.            Console.ReadKey();
  20.        }
  21.    }
  22. }
« Última modificación: 6 Septiembre 2008, 22:07 pm por ArcheritONE » En línea

ghastlyX
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.900



Ver Perfil
Re: Programación algorítmica: unos problemillas
« Respuesta #6 en: 7 Septiembre 2008, 00:01 am »

Son correctas ambas, me ha gustado la segunda, es una forma original de resolverlo, más de tipo matemática que no directa. Eso sí, como ya he dicho, no hay que pedir la entrada con lo de "Introduce los metros de la pared", simplemente recoged los datos, al estilo de UVa, USACO, OIE, IOI, ACM, Topcoder, etc. Poniendo eso en los concursos os daría error, puesto que la salida que produce tiene que ser idéntica a los ejemplos, y en ellos no aparecen peticiones de entrada de datos. Bueno, ya que el de los triángulos está resuelto, intentad el de las minas, que es algo más complejo.

Se podría hacer recursivamente, mirando TODOS los caminos desde cada parcela, pero es brutalmente lento, una solución recursiva no será considerada correcta. En mi primer post di una gran pista de cómo resolverlo, la repetiré: buscad una solución más dinámica!

Un saludo de ghastlyX ;)
En línea

ghastlyX
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.900



Ver Perfil
Re: Programación algorítmica: unos problemillas
« Respuesta #7 en: 8 Septiembre 2008, 00:43 am »

Bueno, voy a poner uno nuevo, esta vez de grafos, lo dejo adjunto. A ver si alguien da ya una solución para el de las minas, para el que no se haya dado cuenta con las pistas o no conozca ese tipo de problemas, es de programación dinámica. Si nadie publica nada tendré que dar yo la solución :P

Un saludo de ghastlyX ;)
En línea

GroK


Desconectado Desconectado

Mensajes: 681


...I have become comfortably numb...


Ver Perfil
Re: Programación algorítmica: unos problemillas
« Respuesta #8 en: 8 Septiembre 2008, 03:46 am »

Si nadie publica nada tendré que dar yo la solución :P

No!! Esperame xDD Tengo un examen mañana y por eso no lo he intentado hasta ahora, no he tenido tiempo, pero cuando llegue me pongo (encima en el examen me cae programacion dinamica :xD Y eso me lo se bien :P)

Saludos
En línea

"I put on my Hendrix album and my son said 'Dad, who's that?' and i said 'Well son, that's God' "- Robert Plant

ghastlyX
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.900



Ver Perfil
Re: Programación algorítmica: unos problemillas
« Respuesta #9 en: 8 Septiembre 2008, 20:47 pm »

OK, me esperaré un poco más y mientras si eso quizá ponga alguno nuevo más. Por ahora hay tres: uno directo, otro DP y otro de grafos.

Un saludo de ghastlyX ;)

PD: Hay que ver, que a muchos los sacan de APIs, hooks y ese tipo de programación y se pierden xDD
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda algorítmica y de Java
Java
Felipe_Henriquez 4 3,136 Último mensaje 12 Enero 2012, 02:18 am
por Felipe_Henriquez
Ejercicio de algorítmica
Dudas Generales
mariele31 1 2,540 Último mensaje 11 Marzo 2022, 21:37 pm
por .xAk.
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines