Случайные и отрицательные числа - PullRequest
10 голосов
/ 30 сентября 2010

Я должен генерировать числа в диапазоне [- 100; +2000] на с ++. Как я могу сделать это с помощью rand, если доступны только положительные числа? Есть ли быстрые способы?

Ответы [ 7 ]

36 голосов
/ 30 сентября 2010

генерирует случайное число от 0 до 2100, затем вычитает 100.

Быстрый поиск в Google нашел достойно выглядящую статью об использовании Rand (). Он включает примеры кода для работы сопределенный диапазон в конце статьи.

6 голосов
/ 30 сентября 2010

Генерация случайного числа от 0 до 2100 и вычитание 100.

5 голосов
/ 30 сентября 2010

Вы можете использовать случайные функции C ++ TR1 для генерации чисел в нужном распределении.

std::random_device rseed;
std::mt19937 rng(rseed());
std::uniform_int<int> dist(-100,2100);

std::cout << dist(rng) << '\n';
4 голосов
/ 30 сентября 2010

Вот код.

#include <cstdlib>
#include <ctime>

int main()
{
    srand((unsigned)time(0));
    int min = 999, max = -1;
    for( size_t i = 0; i < 100000; ++i )
    {
        int val = (rand()%2101)-100;
        if( val < min ) min = val;
        if( val > max ) max = val;
    }

}
4 голосов
/ 30 сентября 2010

Можете ли вы сгенерировать число от 0-2100 и вычесть 100?

1 голос
/ 30 сентября 2010

В C ++ 0x они улучшат это, чтобы обеспечить лучшую поддержку для него со стандартной библиотекой.

http://www2.research.att.com/~bs/C++0xFAQ.html#std-random

1 голос
/ 30 сентября 2010

В настоящее время мой синтаксис C ++ немного устарел, но вы должны написать функцию, которая принимает два параметра: size и offset.

Таким образом, вы генерируете числа с заданным size в качестве максимального значения и затем добавляете (отрицательное) смещение к нему.

Функция будет выглядеть так:

int GetRandom(int size, int offset = 0);

и будет вызван в вашем случае с:

int myValue = GetRandom(2100, -100);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...