2010-11-01 3 views
2

мне нужно сгенерировать 4 цифры случайное число в C++C++ Генерирование 4 цифры случайное число

Я использовал следующий код

#include<time.h> 

int number; 

number=rand()%1000; 
srand (time(NULL)); 

, но его не дает общее случайное число

+1

В качестве дополнения к принятому ответу, есть очень хорошая статья относительно надлежащего использования рандов() и srand () по адресу http://eternallyconfuzzled.com/arts/jsw_art_rand.aspx. – manneorama

ответ

16
number = rand() % 9000 + 1000; 

Есть 9000 четырехзначных чисел, верно? Начиная с 1000 до 9999. rand() вернет случайное число от 0 до RAND_MAX. rand() % 9000 будет от 0 до 8999, а rand() % 9000 + 1000; будет от 1000 до 9999. В общем, если вы хотите случайное число от а до Ь включительно формула

rand() % (b - a + 1) + a 

Также отметим, что srand() должна вызываться только один раз и перед любым rand().

Если вы сделать считают число от 0 до 999 включительно быть «четыре цифры номера», просто используйте rand() % 10000 в этом случае. Я их не считаю, но на всякий случай я освещаю все базы.

НТН

+0

Я уверен, что OP может самостоятельно определить первую часть. И, кстати, факт, что 0045 не является 4-значным числом, является спорным. Важным моментом является сначала вызвать 'srand', чтобы получить« общее случайное число ». – log0

+1

+1. И могу ли я также предположить, что, если есть даже вероятность того, что эта программа будет выполняться несколько раз в узком цикле, вставьте 'sleep (1)' before 'srand (time (0))', чтобы семена были лучше выбран. Это позволит избежать неизбежных «почему мои случайные последовательности не случайны?» вопросы :-) – paxdiablo

3

Не забудьте позвонить srand только один раз.

Посмотрите на Boost.Random, если вам не нравится распределение rand.

// produces randomness out of thin air 
boost::mt19937 rng; 

// distribution that maps to 1000..9999 
boost::uniform_int<> fourdigits(1000,9999); 

// glues randomness with mapping 
boost::variate_generator<boost::mt19937&, boost::uniform_int<> > die(rng, fourdigits); 

// simulate rolling a die 
int x = die(); 
+3

Убивать воробья с помощью ядерного оружия, не так ли? :) Kidding, мне нравится boost, но это может быть слишком много для op, который, кажется, новичок –

+2

Хотя, честно говоря, он стандартный в C++ 0x, поэтому должен быть стандартным способом распространения чисел. – GManNickG

+0

@GMan: Все равно, стандартно ли это слишком сложно для новичка. Я считаю, что это здорово, мы будем иметь это в стандарте, но, возможно, его нужно держать для промежуточных/продвинутых учеников. –

2

Вы должны сеять свой генератор случайного srandдо того вызова rand()

#include<time.h> 

srand(time(NULL)); 
int number = rand() % 10000; // number between 0 and 9999 
Смежные вопросы