Foro Oficial de Algoritmia

bueno la verdad verdad, cuando lo hice pense en hacerlo rapido por aquello de los dos dias, y se me ocurrio que un arbol era la mejor forma para contar las posibles soluciones y asi mismo lo hice, la ventaja es que se muestran los caminos que aunque no se pedia, salio como valor agregado del algoritmo. igual creo q la complejidad de tu solucion y crear el arbol es la misma, lo que gasta mas tiempo es recorrerlo para contar las hojas y creo q ese conteo se puede hacer mientras se crea, igual tu solucion esta muy bkana, ojala tenga tiempo de optimizar y vemos.

por el lado de los caminos, no se si se pueda de una manera no recursiva, (sin usar pilas y esas cosas), seria una muiy buena solucion, espero mas retos por mi parte pensare uno, pues apesar de todo me gane ese derecho creo yo...

roger padilla dijo:
Creatividad y Originalidad es lo que hay en la solucion de fram7.

Yo quiero ver otras soluciones que muestren las posibles formas de caminar del robot, ojala y no recursivas.
.

que palabras ome, gracias!
 
no esta mal y lo felicite y le dije que pusiera el proximo reto porque lo hizo!!! cumplio con el objetivo, yo solo hice un comentario y ya!!! DEJEMOS DE HABLAR TANTA PAJA, pongase su reto pa' seguir pensando :)
 
Hablando con huracancorp hemos llegado a la sig. conclusion:
para no perder la dinamica del juego es mejor poner tiempo limite de un dia
para que la persona que resuelva el reto, publique el nuevo desafio
.

Esperamos esten todos de acuerdo, con esta norma.

.
 
Dada una lista de 5 enteros (entre 1 y 100) encontrar la forma de conseguir cada entero (si es posible) entre 1 y 1000, utilizando las operaciones de suma, resta, producto y división entera, entre 1 o 2 numeros de la lista, sin repetir numero. ejemplo:

Lista: { 5 , 2, 7, 10 , 1}

1=1, 1/1, 5/5, 2/2, 7/7, 10/10

2= 2, 7-5, 2*1,10/5.

3= 10-7, 7/2

...
y asi hasta 1000, es dificil, pero interesante...no se q tal les paresca???




Cada número de la lista sólo se puede usar una vez.
 
Mi solución

PHP:
#include <iostream.h>

void Operaciones(int V[100],int tam,int elem)
{ for(int i=0;i<tam;i++)
  { for(int j=0;j<tam;j++)
    { if(elem == V[i]/V[j]) cout<<V[i]<<"/"<<V[j]<<", ";
      if(elem == V[i]*V[j]) cout<<V[i]<<"*"<<V[j]<<", ";
      if(elem == V[i]+V[j]) cout<<V[i]<<"+"<<V[j]<<", ";
      if(elem == V[i]-V[j]) cout<<V[i]<<"-"<<V[j]<<", ";
    }
  }
}

void Generar(int V[100],int &tam,int &cant)
{ cout<<"Digite el tamaño: ";
  cin>>tam;
  cout<<"Digite hasta donde quiere llega entre 1 y 1000: ";
  cin>>cant;
  for(int i=0;i<tam;i++)
  { cout<<"Digite V["<<i<<"]=";
  cin>>V[i];
  }
}

void Buscar(int V[100],int tam,int cant)
{ for(int i=1;i<=cant;i++)
  { cout<<"\n"<<i<<"= ";
  Operaciones(V,tam,i);
  }
}

main()
{ int V[100],tam,cant;
  Generar(V,tam,cant);
  Buscar(V,tam,cant);
  getchar();
}
ok aqui coloco mi solución al problema.
 
ok, como fui el ganador aqui esta mi reto.

Dato un numero decimal hallar su respectivo quebrado pero no cualquier quebrado sino el quebrado expresado con numeros mas pequeños.

Ejemplo:
valor de entrada: 0.125
Los posibles resultados son: 1/8, 10/80, 100/800, etc. Pero el menor es 1/8 y ese es el que el algoritmo debe dar.
 
Un intento :p


PHP:
#include <iostream.h>

void dec2frac (float n)
{
  float temp;
  int i=1;
  bool sw=false;
 
 while(!sw)
 {
   temp=i*n;

   if((temp-int(temp))==0)
    {
       cout<<i*n<<"/"<<i;
       sw=true; 
     }

     else i++;                                    
  } 
 }

main()
{
  float numero;    
  cout<<"Digite el numero decimal: ";
  cin>>numero;
 
  dec2frac(numero);
  getchar();
 }
 
UAC-Tr0nAd0r dijo:
Un intento :p


PHP:
#include <iostream.h>

void dec2frac (float n)
{
  float temp;
  int i=1;
  bool sw=false;
 
 while(!sw)
 {
   temp=i*n;

   if(temp/int(temp)==1)
    {
       cout<<i*n<<"/"<<i;
       sw=true; 
     }

     else i++;                                    
  } 
 }

main()
{
  float numero;    
  cout<<"Digite el numero decimal: ";
  cin>>numero;
 
  dec2frac(numero);
  getchar();
 }

HEY TRONADOR.... el programa no sirve, meto 0.125 y se cae!
 
tu codigo se cae cuando el decimal esta entre -1 y 1, debido a que tienes
temp/int(temp)
y int(0.125) es 0 y división por 0 da error.
 
Tan raro porque en todos los casos de prueba lo hice con puros decimales iniciados por cero,,,, el primero que probe fue ese 0.125 y me arrojo como respuesta 1/8, incluso tengo un ejecutable (roger padilla favor postealo que ahora estoy en la U :p )

Tienes razon algoritmicamente es incorrecto, lo que no entiendo entonces con un error tan grave como es la division entre cero como es posible que funcione el programa que compile :| :|


P.D: Use el Dev-C++ y el Code::Blocks para compilarlo :)

Saludos =)
 
la correcion es pequeña:

cambiar el condicional:

PHP:
if(temp/int(temp)==1)

por la siguiente:

PHP:
if((temp-int(temp))==0)
 
huracancorp dijo:
tu codigo se cae cuando el decimal esta entre -1 y 1, debido a que tienes
temp/int(temp)
y int(0.125) es 0 y división por 0 da error.

El Programa no se cae, funciona bien, yo mismo lo probe anoche.
Me di cuenta de ese bug en la logica, por eso le dije a UAC-Tr0nAd0r que me mandara el ejecutable, lo probe y pude constatar que el programa si funcionaba. La division por cero si se hace, lo que no se, es porque no da excepcion.

Adjunto el Ejecutable del Programa echo por UAC-Tr0nAd0r y una version del mismo codigo de UAC-Tr0nAd0r pero en Java.
 

Archivos adjuntos

  • dec2frac v C++.rar
    121.5 KB · Visitas: 80
  • UAC-Tr0nAd0r v Java.zip
    2.5 KB · Visitas: 77
huracancorp dijo:
Código:
#include <iostream.h>
#include <math.h>

 int pasos(int n) 
{ if(n>3) return pasos(n-1)+pasos(n-2)+pasos(n-3);   
   else return pow(2,n-1); 
}  

main() 
{ cout<<pasos(10); 
  getchar(); 
}
Esta es mi solución realizada en c++, pueden comparar las respuestas con la otra solución, realmente ambas funcionan.


Terriblemente ineficiente, ese es un caso donde el uso de la recursión en ese estilo hace que sea ineficiente para cualquier N mayor digamos que 10
 
swoko dijo:
Terriblemente ineficiente, ese es un caso donde el uso de la recursión en ese estilo hace que sea ineficiente para cualquier N mayor digamos que 10

ok swoko quiero ver tu solución al problema, facil criticar;) dificil pensar:) quiero ver tu mejor solución, y no es una propuesta, es un reto.
 
Reto:

Dada una cadena de n caracteres, mostrar todas las permutaciones posibles de sus caracteres.

Ejemplo:

sean ABCD
se pueden combinar de 24 ( 4! ) formas incluyendo ABCD asi
ABCD
ABDC
BADC
ACBD
ACDB
CABD... etc...

Saludos
 
Buenas a todos quisiera ver si alguno me pudiera ayudar a encontrar información sobre Algoritmos de Triangulación de Polígonos (en especial de Delauray)
 

Los últimos temas