Poradziłem sobie z poprzenim błędem po prostu usuwając liczby z linijek zawierających błąd, ale program nie mógł wylosować żadnych liczb.
Pytam się, więc jak wylosować np.( 2 liczby spośród 3 liczb, gdzie liczba1 = 15, liczba2 = 33, liczba3 = 181)
Język oczywiście c++
Powinno to być z wykorzystaniem rand()
Tutaj masz koszerną wersję, bez rand: https://dsp.krzaq.cc/post/1304/zwi-4-jak-wylosowac-elementy-bez-powtorzen/
Dlaczego koniecznie chcesz rand()
?
Mam kilka pytań:
Co oznacza 'mt19937'
Co oznacza unordered_set<int>
I w sumie to chcę użyć rand, ponieważ poznaje kolejne "funkcje"/"słowa kluczowe" ( po prostu nie wiem jak to nazwać ) po kolei i chcę nauczyć się korzystać dobrze z rand, a dopiero później korzystać z kolejnych ".../..." (...).
Jeśli mógłbyś bardzo prosiłbym o jakąś wersję z rand(), bo tu mniej więcej wiem jak wszystko działa
Ewentualnie mogę do jutra poczekać, aż ktoś inny łaskawie mi pomoże
http://www.cplusplus.com/reference/random/mt19937/
http://www.cplusplus.com/reference/unordered_set/
Wystarczyła chwila szukania...
user2322 napisał(a):
Mam kilka pytań:
Co oznacza 'mt19937'
Co oznacza unordered_set<int>
A Google kolega potrafi obsługiwać?
Mersenne Twister
unordered_set
I w sumie to chcę użyć rand, ponieważ poznaje kolejne "funkcje"/"słowa kluczowe" ( po prostu nie wiem jak to nazwać ) po kolei i chcę nauczyć się korzystać dobrze z rand, a dopiero później korzystać z kolejnych ".../..." (...).
Jeśli mógłbyś bardzo prosiłbym o jakąś wersję z rand(), bo tu mniej więcej wiem jak wszystko działa
Ewentualnie mogę do jutra poczekać, aż ktoś inny łaskawie mi pomoże
Chcesz się uczyć C++ czy C?
std::array<int, 3> nums{ 15,33,181 };
std::shuffle(nums.begin(), nums.end(), std::mt19937{ std::random_device{}() });
for (std::size_t i = 0; i < 2; ++i) {
std::cout << nums[i] << ' ';
}
YooSy napisał(a):
Widziałem, ale ja chcę wiedzieć jak mam go wykorzystać do konkretnych liczb (np. a = 5, b = 13, c = 34), a tam jest przykład z przedziału liczb od x do y
W przykładzie z linka jest losowanie 5 liczb z zadanego przedziału, więc można wykorzystać go do wylosowania dwóch liczb z przedziału od 0
do rozmiar tablicy liczb - 1
.
Zapamiętać tylko te niepowtarzające się i wykorzystać je jako indeksy, do wyświetlenia liczb. (To można wykonać za pomocą kodu z linka).
Rozumiem, że ma to wyglądać tak:
int x = 3;
int y = 7;
int z = 18;
( rand(x, y, z) % 50 ) - 1;
?
Wersja C++98:
#include <iostream>
#include <string>
#include <ctime>
template<typename T, size_t S>
class array {
private: T m_data[S];
public: T& operator[](size_t pos) {
return m_data[pos];
}
size_t size() const { return S; }
};
int main()
{
srand (time(NULL));
array<int, 4> arr;
// arr = {1, 8, 17, 20};
arr[0] = 1, arr[1] = 8; arr[2] = 17; arr[3] = 20;
int cnt = arr.size();
do {
int idx = 0;
int pos = rand() % cnt;
do {
if (arr[idx]) {
if (!pos) break;
pos--;
}
} while(++idx < arr.size());
std::cout << arr[idx] << ", ";
arr[idx] = 0;
} while(--cnt);
}
@kq: możesz to dopisać do bloga, jeśli uznasz za stosowne. Kod na licencji public domain.