Jak wylosować liczby spośród konkretnych liczb w c++

0

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()

0

Tutaj masz koszerną wersję, bez rand: https://dsp.krzaq.cc/post/1304/zwi-4-jak-wylosowac-elementy-bez-powtorzen/

Dlaczego koniecznie chcesz rand()?

0

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

1
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?

1
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] << ' ';
   }

a tutaj przykład z losowania z użyciem std::rand().

0
YooSy napisał(a):

a tutaj przykład z losowania z użyciem std::rand().

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

0

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).

0

Rozumiem, że ma to wyglądać tak:

int x = 3;
int y = 7;
int z = 18;
( rand(x, y, z) % 50 ) - 1;

?

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.

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