[C]Remplir un tableau d'entiers uniques aléatoirement

Remplir un tableau d'entiers uniques aléatoirement [C] - C - Programmation

Marsh Posté le 21-04-2007 à 23:31:51    

Bonjour,  
 
Je cherche un algo qui me permettrait de remplir un talbeau d'entiers uniques aléatoirement (comme dit dans le titre). Je sais que c'est tout con et que sa se trouve partout mais ce n'est pas toujours ce qui a l'air le plus simple à faire qui l'est. :)
 
Donc j'ai un  
 
int tab[5] et je veux qu'il contienne un truc du genre 3, 1, 4, 2, 5
 
Merci d'avance pour votre aide!
 
Edit:  
 
J'ai fait cela :  
 

Code :
  1. for (i = 0; i < 52; i++)
  2.             {
  3.                 carteordre[i] = rndm.Next(53); // (oui c'est du CSharp en fait mais ca revient au même)
  4.                 for (j = 0; j < 52; j++)
  5.                 {
  6.                     if (carteordre[j] == carteordre[i])
  7.                     {
  8.                         carteordre[i] = rndm.Next(53);
  9.                         j = 0;
  10.                     }
  11.                 }
  12.             }


 
Mais ca ne fonctionne pas, ca freez et c'est loin d'être optimisé!!


Message édité par Jericho le 21-04-2007 à 23:33:21
Reply

Marsh Posté le 21-04-2007 à 23:31:51   

Reply

Marsh Posté le 21-04-2007 à 23:57:28    

et pourquoi pas du rand() tout simplement ?


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Marsh Posté le 22-04-2007 à 00:03:33    

Gros malin, dans ta boucle sur j, à un moment t'aura bien i==j. Et donc carteordre[j] == carteordre[i] au moins une fois par boucle et hop on remet j à 0 et on recommence... C'est normal que ça ne finisse pas;)
Si tu modifies la ligne :  
if (carteordre[j] == carteordre[i])
en :
if (carteordre[j] == carteordre[i] && i!=j) ça devrait mieux marcher.
 
En disant ça je me rend compte que c'est même pas la peine de parcourir le tableau en entier... Il suffit de le parcourir jusqu'à i, le dernier élément initialisé...

Code :
  1. for (i = 0; i < 52; i++)
  2. {
  3.    arteordre[i] = rndm.Next(53);
  4.    for (j = 0; j < i; j++)
  5.    {
  6.       if (carteordre[j] == carteordre[i])
  7.       {
  8.       carteordre[i] = rndm.Next(53);
  9.       j= 0;
  10.       }
  11.    }
  12. }


même plus besoin de vérifier si i!=j

Reply

Marsh Posté le 22-04-2007 à 11:44:16    

Waw, du bon boulot ca!, ca fonctionne niquel!
 
Merci beaucoup  :)

Reply

Marsh Posté le 22-04-2007 à 11:59:25    

:)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed