Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Losowanie 10 liczb różnych od siebie

Ostatnio zmodyfikowano 2014-10-25 14:27
Autor Wiadomość
lectre
Temat założony przez niniejszego użytkownika
Losowanie 10 liczb różnych od siebie
» 2014-10-25 14:04:59
Witam. Program niestety nie działa w 100%, czasami liczby się powtarzają. Zmienne i oraz o działają prawidłowo.
C/C++
#include <iostream>
#include <cstdlib>
#include <time.h>

int main()
{
    srand( time( NULL ) );
    const int ilosc = 10;
    int x[ ilosc ];
    for( int i = 0; i < ilosc; i++ )
    {
        x[ i ] = rand() % 10;
    }
   
    for( int i = 0; i < ilosc; i++ )
    {
        for( int o = 0; o < ilosc; o++ )
        {
            if( i == o ) continue;
           
            while( x[ i ] == x[ o ] ) x[ i ] = rand() % 10;
            //std::cout << "o= " << o << std::endl;
        }
        //std::cout << std::endl << "i= " << i << std::endl << std::endl;
    }
    for( int i = 0; i < ilosc; i++ )
         std::cout << x[ i ] << " ";
   
}
P-119369
1aam2am1
» 2014-10-25 14:08:55
Liczba którą wylosowałeś przy sprawdzaniu czy się powtarzają mogła już być wylosowana a w ostatniej pętli już tego niesprawdzasz
P-119370
stryku
» 2014-10-25 14:14:01
Zrób sobie funkcję, która będzie sprawdzała czy liczba jest już wylosowana. Np taka:

C/C++
bool juzJest( int tab[], int liczba, int ilosc )
{
    for( int i = 0; i < ilosc; i++ )
    if( tab[ i ] == liczba )
         return true;
   
    return false;
   
}

I już przy losowaniu sprawdzaj czy wylosowałeś unikatową liczbę
C/C++
for( int i = 0; i < ilosc; i++ )
{
    int liczba;
   
    do {
        liczba = rand() % 10;
    } while( juzJest( x, liczba, i ) )
   
         x[ i ] = liczba;
   
}
P-119371
lectre
Temat założony przez niniejszego użytkownika
» 2014-10-25 14:27:00
Dziękuję za bardzo szybkie i trafne odpowiedzi. W odpowiedzi kolegi wyżej brakuje jedynie średnika na końcu pętli do while. Temat do zamknięcia.
P-119376
« 1 »
  Strona 1 z 1