Otros temas que te pueden interesar
|
||||
| Tema | Autor | Foro | Respuestas | Último post |
| [Duda] Sumar decimales | Socavi | COBOL - General | 19 | 5 de enero de 2023 17:51 |
| [Sintaxis] Ejemplo guardar lista de archivos | luisbago | RM/COBOL | 7 | 18 de mayo de 2022 15:58 |
| [Sintaxis] Identificacion de numeros en una cadena | Breew | PowerCOBOL (ActiveX, v4 - v11) | 2 | 4 de noviembre de 2018 19:47 |
| Traductor de números a letras. | Gusaiello | Cocina AcuCOBOL | 2 | 22 de mayo de 2018 20:45 |
| [Componente] Rutina Números Aleatorios | Hrmcobol | PowerCOBOL (ActiveX, v4 - v11) | 2 | 15 de octubre de 2017 01:26 |
![]() |
|
Patrocinador del Foro
|
Hola.
Como conseguiriais averiguar en un listado de numeros, que combinacion de numeros suman un valor determinado. Por ejemplo, si tengo un listado con 30 numeros, que combinaciones de numeros suman un total de 986. Gracias |
||||||||
|
|
|
|
El Foro es mi casa
![]()
|
https://craftofcoding.wordpress.com/...-and-an-array/ Usar índices poderá ajudar: Código COBOL:
|
|||||||||
|
|
|
|
El Foro es mi casa
![]()
|
Esto se puede resolver de forma recursiva o interactiva. De forma interactiva lo haría de la siguiente forma: - Metería los números en un occurs o tabla. - Buscar combinaciones de 1 elemento. Hasta recorrer la tabla o pasarse de la suma (condicion). - Buscar 2 elementos alternando posiciones, hasta (condición). * * * - Buscar 29 elementos alternando posiciones, hasta condición. - Buscar 30 elementos, hasta condición. O quizas hacerlo justamente al revés. Bonito reto. A ver si tengo un rato y lo implemento. ![]() |
|||||||||
|
|
|
|
Moderador Global
![]()
|
@JCantero,
No existe ningún algoritmo que haga eso, (que yo sepa), el caso está en que si son la suma de 2 o 3 elementos en una combinación de, por ejemplo 30 elementos, el algoritmo es sencillo y rápido, el problema está en que sean la suma de cualquiera de los 30 elementos, (en el que necesites sólo 1 para que dé ese valor, o necesites los 30, para que lo dé), ahí el problema es que la cantidad de combinanciones, es exponencial al número de elemento, por lo que, en una tabla de 30 elementos, la cantidad de combinaciones sería de 2,6e+32, (30!), osea, 26 seguido 32 ceros, (2.600.000.000.000.000.000.000.000.000.000.000), lo cual, hace imposible el cálculo. Un saludo.- |
||||||||
|
|
|
|
El Foro es mi casa
![]()
|
Creo que no es tanto. Son (2^30)-1 == 1.073.741.823 Bonito reto |
|||||||||
|
|
|
|
El Foro es mi casa
![]()
|
Em anexo projecto em Powercobol para calculo de um factorial e uma solução para o problema: Código COBOL:
|
|||||||||
|
|
|
|
El Foro es mi casa
![]()
|
@Joseg, reto conseguido y muy curiosa la solución.
---------- Post añadido : 14:35 ---------- Post anterior : 14:17 ---------- Va analizando cada combinación en binario. Es decir: 0 1 01 11 001 101 011 111 * * * 1111111111111 (hasta las posiciones que se configuren, en este caso 12) Y va sumando en cada combinacion con los elementos de la lista dada y comprobando si da el resultado buscado. ¡ Muy Curioso ! pero eficiciente. Ya lo he modificado para 30 elementos y lo he puesto en un windows y en un linux, a ver lo que tarda ¡¡¡ ![]() ---------- Post añadido : 20:18 ---------- Post anterior : 14:35 ---------- Para vuestra información y curiosidad. (buscando con 30 elementos) ( 2^30-1 combinaciones) Compilado en RM/cobol y ejecutado en windows y linux. Después de 7 horas esperando: 1) el proceso de windows 10 (64 bits) lleva un 30% 2) el proceso en linux (virtual) con 8 CPUs lleva un 45% He realizado lo mismo en C. Lo he ejecutado en el linux. Ha tardado 2,5 minutos. Ya lo esperaba pero me ha sorprendido tan poco tiempo. Me gustaria que hicierais lo mismo en otros COBOL para ver como son de rápidos en estas cosas. Hacedlo para 30 elementos, modificando el programa de @joseg o os lo envio. Por este motivo yo muchas veces implemento rutinas en C para obtener mejores resultados aunque no sean valorados. ![]() |
||||||||
|
|
|
|
Administrador
![]()
|
@JCantero, el problema de rendimiento debe venir del hecho que la rutina de @Joseg (a diferencia de tu rutina en C) no usa campos nativos.
Los COMP y COMP-3 deben reemplazarse por unos COMP-5 (de 2-4-8 bytes) para corresponder con la plataforma. Esto acelerará mucho el asunto. NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro. ![]() ¿Te han ayudado? NO TE OLVIDES de darle a ![]() ¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick |
||||||||
|
|
|
![]() |
|
|
| Archivo - Cobol Foro | Contactar con Nosotros - Cobol Foro | |||||||