случайный — C ++ генерирует рандовые числа

В C ++ возможно ли использовать rand для генерации числа от 1 до 52, но указав, что оно не может быть 23? Как, например, при создании игры в блэкджек, вам необходимо убедиться, что игрок не может получить ту же карту после случайного генерирования первой.

2

Решение

Конечно.

int i = 23;
while (i == 23)
i = rand() % 52 + 1;

При генерировании случайных чисел с требуемым распределением довольно часто отбрасывать неприемлемые значения.

Тем не менее, для игры в блэкджек вам нужно сдать более одной карты. Лучше иметь полную колоду и перемешать ее (std::random_shuffle), затем возьмите карты с одного конца контейнера, в котором находится колода.

13

Другие решения

int value = rand(1,51);
if (value >= 23) ++value;

где rand(a,b) дает число в диапазоне [a,b]и может быть реализовано как std::rand() % (b-a+1) + aс оговоркой, что это не совсем равномерное распределение.

4

Вот программа, которая делает колоду от 1 до 52 (включительно) и печатает колоду.
Это показывает STL (и немного устаревший акцент C ++)

#include <algorithm>    // std::random_shuffle
#include <ctime>        // std::time
#include <cstdlib>      // std::rand, std::srand
#include <iostream>     // std::cout
#include <vector>       // std::vector

int main() {
std::vector<int> deck;

// Create deck; deck creation logic goes inside loop
for (int i = 1; i <= 52; ++i) {
deck.push_back(i);
}

// initialize random number generator and shuffle deck
std::srand(std::time(0));
std::random_shuffle(deck.begin(), deck.end());

// print entire deck
while (!deck.empty()) {
int card = deck.back();    // draw card
std::cout << "Drew " << card << '\n';
deck.pop_back();           // remove card from deck
}
}
1

Взгляни на std::random_shuffle,

0
int n=(rand() % 52)+ 1;
while(n==23)
n= n=(rand() % 52) + 1;

http://www.cplusplus.com/reference/cstdlib/rand/

0

Еще один крутой способ сделать это с помощью массива.

Создать вектор:

std::vector<int> possibilities;

Вставьте в него возможные значения:

possibilities.push_back(0);
possibilities.push_back(1);
possibilities.push_back(10);

И затем выберите случайный из этого:

int random = possibilites[ rand() % possibilites.size() ];
0