[PBM]Addition de nombres aléatoirs

Stoofleouf Messages postés 1 Date d'inscription dimanche 27 juillet 2003 Statut Membre Dernière intervention 15 avril 2007 - 15 avril 2007 à 22:48
cs_6co Messages postés 114 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 5 avril 2012 - 17 avril 2007 à 23:15
Bonjour, je débute en C++ et j'ai un souci :
Je veux pouvoir générer une serie de nombre aléatoire tout en parametrant au préalable la somme des nombres qui seront générés. Je souhaiterai aussi pouvoir définir à l'avance le nombre de chiffres pairs générés.
Quelqu'un pourrait-il m'aider ?

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char *argv[])
{
  long unsigned n1=0, n2=0, n3=0, n4=0, n5=0, n6=0, n7=0;
  int pair=0;
  long poid=0;  const long MAX 49, MIN 1;
 
 
  do    //on entre le nombre de chiffres pairs que l'on désire générer
  {
       printf("Nombre de numeros pairs (doit etre situe entre 0 et 7) :\n");
       scanf("%ld", &pair);
  }
  while (pair > 7 || pair < 0);
 
  do    //On demande la somme de tous les chiffres générés
  {
        printf("Poid de la grille desire (doit etre situe entre 28 minimum et 322 maximum) :\n");
        scanf("%ld", &poid);
  }
  while (poid > 322 || poid < 28);
 
 
 
  srand(time(NULL));   //Algorithme de génération
    n1 = (rand() % (MAX - MIN + 1)) + MIN;
    n2 = (rand() % (MAX - MIN + 1)) + MIN;
    n3 = (rand() % (MAX - MIN + 1)) + MIN;
    n4 = (rand() % (MAX - MIN + 1)) + MIN;
    n5 = (rand() % (MAX - MIN + 1)) + MIN;
    n6 = (rand() % (MAX - MIN + 1)) + MIN;
    n7 = (rand() % (MAX - MIN + 1)) + MIN;

   
          while ((n1 n2) || (n1 n3) || (n1 == n4) || (n1 == n5) || (n1 == n6) || (n1 == n7) || (n2 == n3) || (n2 == n4) || (n2 == n5) || (n2 == n6) || (n2 == n7) || (n3 == n4) || (n3 == n5) || (n3 == n6) || (n3 == n7) || (n4 == n5) || (n4 == n6)|| (n4 == n7) || (n5 == n6) || (n5 == n7) || (n6 == n7));
    {
           printf("%ld, %ld, %ld, %ld, %ld, %ld, %ld\n\n\n\n", n1, n2, n3, n4, n5, n6, n7);
    }
   

 
 
  system("PAUSE");   
  return 0;
}

1 réponse

cs_6co Messages postés 114 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 5 avril 2012 1
17 avril 2007 à 23:15
Salut, j'ai du mal à suivre l'algo que tu proposes, alors j'en ai fait un vite fait (qui dit vite fait, dit non commenté et plus ou moins testé)

en gros il consiste à prendre un premier nombre, à tester s'il reste assez de différence entre la somme voulue et ce premier nombre...
ensuite, on continue de la même façon...

j'espère que cela pourra t'aider,
et j'aimerais aussi connaitre le but final d'un tel algorithme
(y en a-til un ? ou c'est juste un exercice ? )

bon courage,
6co

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include

using namespace std;

unsigned int nb_alea(unsigned int debut,unsigned int fin,unsigned int parite)
{
    // retourne une nombre aléatoire pair si parite=0, impair si parite=1 ou quelconque sinon
    unsigned int nb;
    nb=rand() % (fin-debut+1) + debut;
 if (parite!=2)
     while ((nb%2)!=parite)
         nb=rand() % (fin-debut+1) + debut;
    return nb;
}    

unsigned int parite(int pairs, int impairs)
{
    if (pairs!=0 && impairs!=0)
        return 2;
    if (pairs!=0)
        return 0;
    return 1;
}    

int main(int argc, char *argv[])
{
    unsigned char nombre[7];
  unsigned int somme, somme_test_1, somme_test_2;
  unsigned int pairs=10,impairs;
  unsigned int i,j,k;
    
 
    cout << "Donnez la somme désirée (entre 28 et 322)";
    while (somme<=28 || somme >=322)
    {
   cin >> somme;
        if (somme<=28 || somme >=322)
            cout << "Donnez un nombre entre 28 et 322    ";
    }
    cout << "Donnez le nombre de pairs désiré (entre 0 et 7)";
    while (pairs<=0 ||  pairs>=7)
    {
   cin >> pairs;
   if (pairs<=0 || pairs >=7)
            cout << "Donnez un nombre entre 0 et 7    ";
    }

 // initialisation nombre aléatoires
    srand(time(NULL));
 // premier test, la quantité de nombre impairs et la somme doivent etre de meme parité :
    impairs = 7 - pairs;
    if ((somme - impairs)%2 != 0)
    {
        cout << "Problème impossible à résoudre";
        return 1;
    }    
    
    // on trouve un premier nombre
    somme_test_1=0;
    nombre[0]=0;
    for (k=0 ; k<6; k++)
    {    
      
      somme_test_2=0;
      while (somme_test_2>somme || somme_test_2==0)
      {
       somme_test_2=somme_test_1;
          nombre [k]=nb_alea(1, somme, parite (pairs, impairs));
       somme_test_2+=nombre[k];
       for ( i=k+1; i
0
Rejoignez-nous