[C con Clase] Problema con numeros aleatorios para todos....

Yolmer Rosales yolmer.rosales en gmail.com
Jue Sep 16 18:00:13 CEST 2010


El 14 de septiembre de 2010 09:52, MuGliDaRk <muglidark en gmail.com> escribió:

> *Un ejercicio:
>
> Listar 20 numeros aleatorios, que cada numero pueda estar en el intervalo
> de 0 a 180, ademas que la suma de los 20 numeros resulte 500.
>
> nota:
> Un numero puede repetirse.
>
> Es un ejercicio, que a simple vista, parece facil, pero tiene, sus
> detalles....
>
> *
>
Amigos tengo una propuesta de solución pero quiero ver que opinan uds auqí
les dejo el codigo probado en win xp con Dev-C++

#include <cstdlib>
#include <iostream>
#include <stdlib.h>
using namespace std;

int suma(int lista_numeros[19]);

int main(int argc, char *argv[])
{
    int lista_numeros[19], c;
    srand (time(NULL));
    for( c = 0; c <=19; c++)
    lista_numeros[c] = 0;
// genero los números aleatorios para rellenar el array
    for( c = 0; c <=19; c++)
    {
        //si está lejos del final permitimos aleatorios
        if (c < 17)
        {
            // si la suma es baja permitimos números altos
         if (suma(lista_numeros) <= 320)
            lista_numeros[c] = rand() % (rand() % 182);
            // si no trabajamos con la diferencia
        else
             lista_numeros[c] = rand() % (500 - (suma(lista_numeros)+1));
        }
        else if ( c == 17 )
        {
            // si vamos llegando al final y la suma es baja forzamos
            //números altos
            if ( suma(lista_numeros) <= 140)
            lista_numeros[c] = (rand() %  41) + 140;
        }
        else if ( c <19 )
        // en las dos últimas posiciones se trabaja por diferencia
            lista_numeros[c] = rand() % (500 - suma(lista_numeros)+1);
        else
             lista_numeros[c] = 500 - suma(lista_numeros);

}
//se muestran los números
    for ( c = 0 ; c <= 19 ; c++)
       cout << lista_numeros[c] << endl;
// y la suma
    cout << endl << suma(lista_numeros) << endl ;

        system("PAUSE");
    return EXIT_SUCCESS;

};


int suma (int lista_numeros[19])
{
    int total = 0, c;
    for (c = 0 ; c <= 19 ; c++)
         total += lista_numeros[c];
    return total;
}
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20100916/4e7b8e1e/attachment.html>


Más información sobre la lista de distribución Cconclase