2010-09-30 4 views

ответ

35

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

Быстрый поиск Google повернул вверх decent looking article on using Rand(). Она включает в себя примеры кода для работы с определенным диапазоном в конце статьи.

4

Можете ли вы создать число от 0 до 10000 и вычесть 100?

6

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

3

Вот код.

#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; 
    } 

} 
+0

Это не даст равномерного распределения! Кроме того, поиск минимального и максимального числа 100000 таких чисел не имеет отношения к вопросу. – darklon

+0

Также, если случайно 'val' был' -100' каждый раз, результат 'max' был бы неправильным. То же самое для минимум. –

+0

@Cornelius, @Ben: Кому это нужно? Это просто демо. Если бы я опубликовал только «(rand()% 2101) -100', что было бы лучше, чем компилируемый, исполняемый образец? Пожалуйста. –

1

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

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

функция будет выглядеть следующим образом:

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

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

int myValue = GetRandom(2100, -100); 
5

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

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

std::cout << dist(rng) << '\n'; 
+0

Для тех, у кого нет TR1, boost :: random довольно близко. – MSalters