Losowanie liczb

0

Cześć! Prosiłbym o pomoc, bo robię program, który będzie czymś w rodzaju symulatora Lotto, jednkak mam problem, bo część kodu odpowiedzialna za to, aby liczby były różne nie działa, zrobiłem to tak że zrobiłem pętle for z niewiadomą g i wewnętrzną for z z, w środku umieściłem instrukcję if, która, ma warunek (liczby[g]==tw[z]), a w środku ma jeszcze pętle do while i funkcje rand, dopiero zaczynam, więc moje pytanie to, czy takie zagnieżdżanie i ustawianie w instrukcji if zmiennej z pętli ma prawo działać? Czy macie jakiś pomysł jak zrobić tak, żeby liczby się nie powtarzały, chodzi mi raczej o sposób, a nie o sam kod?

0

Prosić o ocenę programu na podstawie opisu, a nie faktycznego kodu to trochę tak, jakby prosić o stwierdzenie, czy dziewczyna jest ładna, nie pokazując zdjęcia, a jedynie ją opisując… Ja się tego nie podejmę.

Ale jeśli pytasz o losowy wybór k niepowtarzających się elementów z n możliwych — to najmniej pracochłonne będzie wzięcie sobie gotowca z biblioteki standardowej, konkretnie std::random_shuffle.

0
 for(int g=0;g<6;g++)
    {
        for(int y=0;y<6;y++)
        {
            xc=liczba[g]-liczba[y];
            if(xc==0)
            {
                do
                {
                    liczba[y]=rand();
                    mm=(liczba[g]%49)-(liczba[y]%49);
                }
                while(mm==0);
            }
        }
    }
0
Czy macie jakiś pomysł jak zrobić tak, żeby liczby się nie powtarzały, chodzi mi raczej o sposób, a nie o sam kod?

std::uniform_int_distribution<> - do losowania liczb. Przykład użycia
std::set<> - std::set do trzymania unikalnych i posortowanych wylosowanych wartości.

 #include <iostream>
#include <chrono>
#include <random>
#include <set>
#include <algorithm>

int main()
{
    std::set<unsigned> numbers;
    auto seed = std::chrono::system_clock::now().time_since_epoch().count();
    std::default_random_engine dre(seed);
    std::uniform_int_distribution<unsigned> dist(1, 49);

    while (numbers.size() < 6) {
        numbers.insert(dist(dre));
    }

    for (auto const& el : numbers) {
        std::cout << el << ' ';
    }
}

http://melpon.org/wandbox/permlink/ixLOxTWgmeeHxttF

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0