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

[C++]Losowanie liczb bez powtórzeń

Ostatnio zmodyfikowano 2014-05-22 20:27
Autor Wiadomość
dolby1092
Temat założony przez niniejszego użytkownika
[C++]Losowanie liczb bez powtórzeń
» 2014-05-22 17:40:45
Mam problem z zadaniem z powyższego tematu. Program losuje liczby podane przez użytkownika lecz się powtarzają. Próbuje już od paru godzin i nie wiem co jest źle.Udało mi się zrobić coś takiego.

C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int dodaj( int t[] )
{
    int i = 0;
    cout << "Podaj 3 liczby: ";
    do
    {
        cin >> t[ i ];
        i++;
       
    } while( i < 10 );
   
}
int losuj()
{
    return( rand() % 10 ) + 0;
}
int czyWylosowano( int t[], int ile, int liczba )
{
    if( ile <= 0 )
         return false;
   
    int i = 0;
    do
    {
        if( t[ i ] == liczba )
             return true;
       
        i++;
    } while( i < ile );
   
    return false;
}

int main()
{
    srand( time( 0 ) );
    int uzytkownika[ 10 ];
    int wylosowane[ 8 ];
   
    int liczba;
    int ile = 0;
   
    dodaj( uzytkownika );
    do
    {
        int liczba = losuj();
        if( czyWylosowano( wylosowane, ile, liczba ) == false );
       
        wylosowane[ ile ] == uzytkownika[ liczba ];
       
        ile++;
       
    } while( ile < 8 );
   
    ile = 0;
    do
    {
        cout << wylosowane[ ile ] << ", ";
        ile++;
    } while( ile < 8 );
   
    return 0;
}
P-110651
maly
» 2014-05-22 17:57:15
if( czyWylosowano( wylosowane, ile, liczba ) == false );
 średnikom za if-em mówimy stanowcze NIE:)
P-110654
dolby1092
Temat założony przez niniejszego użytkownika
» 2014-05-22 18:36:01
średnik usuniety i teraz losuje same 0 i jakas duza liczbe
P-110655
Moorfox
» 2014-05-22 19:35:19
Nie chce mi sie czytac kodu calego, ale sadzac po nazwach funkcji moze:
C/C++
if( czyWylosowano( wylosowane, ile, liczba ) ) continue;

Po za tym nadal sadzac po nazwach funkcji moge wywnioskowac (zakladajac n-ile liczb podlega losowaniu, k-ile liczb chcesz wylosowac) i warunek n>k to:
jezeli n duzo wieksze od 0 powiedzmy 5000
i zwlaszcza jezeli n i k sa prawie rowne
to zlozonosc obliczeniowa takiego algorytmu jest ogromna i zdefiniowanie zlozonosci czasowej jest teoretycznie nie mozliwe
Po za tym
C/C++
wylosowane[ ile ] == uzytkownika[ liczba ];
Chyba nie musze nic wiecej mowic ?
P-110657
Rajdowiec
» 2014-05-22 20:21:32
int dodaj nic nie zwraca
P-110665
Negatyw
odp
» 2014-05-22 20:27:18
Może wyczyść strumień przy wczytywaniu liczby za pomocą cin.clear()
P-110669
« 1 »
  Strona 1 z 1