Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: luis456 en 15 Abril 2013, 10:47 am



Título: Limitar rango de numeros en funcion
Publicado por: luis456 en 15 Abril 2013, 10:47 am
Hola tengo esta función que lo que hace es ordenar o digamos combinar una serie de números que introduzco.

y estoy buscando como hacer que no me combine mas de dos numeros de la misma serie ejemplo

12 17 21 24 25 26 < eliminar todo registro que tenga esta forma 21 24 25 26

12 18 22 84 85 86< como se ve que no permita tener mas de dos registros dentro de su rango

Con if se podria creo yo pero no encuentro la logica




Código:
 j=0;
    for (i=0;i<=n-2*ver+1  ;i++){
       //if (j>total) break;
      for (j=10+i;j<n ;j+=2){
        combi++;
        if (numeros_no_repe[0+i]>0 && numeros_no_repe[j]<100 ){
            cout<< numeros_no_repe[0+i] <<" " << numeros_no_repe[1+i] <<" "<< numeros_no_repe[5+i]<<" "  << numeros_no_repe[8+i] <<" " << numeros_no_repe[9+i] <<" "<< numeros_no_repe[j]<< endl;
              fs<< numeros_no_repe[0+i] <<" " << numeros_no_repe[1+i] <<" "<< numeros_no_repe[5+i]<<" "  << numeros_no_repe[8+i] <<" " << numeros_no_repe[9+i] <<" "<< numeros_no_repe[j]<< endl;
        //
            cout<< numeros_no_repe[0+i] <<" " << numeros_no_repe[2+i]  <<" "<< numeros_no_repe[6+i]<<" "  << numeros_no_repe[8+i] <<" " << numeros_no_repe[9+i] <<" "<< numeros_no_repe[j]<< endl;
              fs<< numeros_no_repe[0+i] <<" " << numeros_no_repe[2+i]  <<" "<< numeros_no_repe[6+i]<<" "  << numeros_no_repe[8+i] <<" " << numeros_no_repe[9+i] <<" "<< numeros_no_repe[j]<< endl;
       
             
       
        //
        }
      }
      cout<<endl;
      fs<<endl;
    }
  cout<<endl<<"Combinaciones totales: "<<combi<<endl;
  fs<<endl<<"Combinaciones totales: "<<combi<<endl;
  fs.close();
  system("pause");
  return EXIT_SUCCESS;
}


luis


Título: Re: Limitar rango de numeros en funcion
Publicado por: leosansan en 15 Abril 2013, 20:58 pm
Hola tengo esta función que lo que hace es ordenar o digamos combinar una serie de números que introduzco.

y estoy buscando como hacer que no me combine mas de dos numeros de la misma serie ejemplo

12 17 21 24 25 26 < eliminar todo registro que tenga esta forma 21 24 25 26

12 18 22 84 85 86< como se ve que no permita tener mas de dos registros dentro de su rango

Con if se podria creo yo pero no encuentro la logica



Querido amigo Luis estas tirando piedras sobre tu propio tejado.

Me explico. No puedes pedir que de un número me pidas tomar los dos anteriores y los dos posteriores para combinarlos y luego pretender que no te salgan en las combinaciones "pegados". Fíjate que con tu "petición" ya aparecen cuatro números en la misma decena. Y la cosa se complica si entre los números que "entras" están, dos en la misma decena, por ejemplo, el 13 y el 18 ya que eso daría lugar a que entre los 36 números a tomar estén el 11, 12, 14, 15, 16,17, 19 y 20 ¡¡¡¡ocho números de la misma decena¡¡¡¡. Claro, al hacer las combinaciones lo normal es que aparezcan varios de la misma decena. Pero la estadística es así de caprichosa.

¿Pero cuando he dejado yo a un amigo "colgado" pendiente de una posible solución?. Ésta la tienes a mano, sin más que "separar" un poco más los números a imprimir y ahí está tu propio criterio de cuánto los separas, sin abandonar las ideas o condiciones que previamente habías puesto.

Fíjate que en la entrada que te presento hay tres"malos" por estar muy juntos, el 3 el 9 y el 15 y sin embargo la salida cumple meridianamente con tu propuesta, casi dos como máximo por decenas:

Código
  1. Ingrese el 1 numero: 3
  2. Ingrese el 2 numero: 9
  3. Ingrese el 3 numero: 15
  4. Ingrese el 4 numero: 23
  5. Ingrese el 5 numero: 36
  6. Números introducidos: 3 9 15 23 36
  7.  
  8.  
  9.  
  10. 1 2 4 5 6 7 8 10 11 12 13 14 16 17 18 20 21 22 24 25 26 33 34 35 37 38 39
  11.  
  12.  
  13. 1 10 14 20 22
  14. 1 10 14 20 25
  15. 1 10 14 20 33
  16. 1 10 14 20 35
  17. 1 10 14 20 38
  18.  
  19. 2 11 16 21 24
  20. 2 11 16 21 26
  21. 2 11 16 21 34
  22. 2 11 16 21 37
  23. 2 11 16 21 39
  24.  
  25. 4 12 17 22 25
  26. 4 12 17 22 33
  27. 4 12 17 22 35
  28. 4 12 17 22 38
  29.  
  30. 5 13 18 24 26
  31. 5 13 18 24 34
  32. 5 13 18 24 37
  33. 5 13 18 24 39
  34.  
  35. 6 14 20 25 33
  36. 6 14 20 25 35
  37. 6 14 20 25 38
  38.  
  39. 7 16 21 26 34
  40. 7 16 21 26 37
  41. 7 16 21 26 39
  42.  
  43. 8 17 22 33 35
  44. 8 17 22 33 38
  45.  
  46. 10 18 24 34 37
  47. 10 18 24 34 39
  48.  
  49. 11 20 25 35 38
  50.  
  51. 12 21 26 37 39
  52.  

¿Dónde está el secreto de este logro?. En el "cout" , fíjate bien que lo que hago es "distanciar" los elementos a tomar, presumiendo de antemano que algunos estarán muy juntos:

Código
  1. *******************************************************/
  2.     j=0;
  3.    for (i=0;i<=n-2*ver+1  ;i++){
  4.       //if (j>total) break;
  5.      for (j=17+i;j<n ;j+=2){
  6.        combi++;
  7.        if (numeros_no_repe[0+i]>0 && numeros_no_repe[j]<50  ){
  8.            cout<< numeros_no_repe[0+i] <<" " << numeros_no_repe[7+i] <<" "<< numeros_no_repe[11+i]<<" "  << numeros_no_repe[15+i] <<" " << numeros_no_repe[j]<< endl;
  9.  

Todo es "jugar" ahora con la separación que más probable consideres. Pero, siempre hay un pero en estadística, a cambio pierdes combinaciones posibles. Todo es cuestión de "medida".

Saluditos! ....
(http://i1280.photobucket.com/albums/a497/leosansan/leosan1/emoticonos161_zpsb0b98b2c.gif)