мне нужно сгенерировать 4 цифры случайное число в C++C++ Генерирование 4 цифры случайное число
Я использовал следующий код
#include<time.h>
int number;
number=rand()%1000;
srand (time(NULL));
, но его не дает общее случайное число
мне нужно сгенерировать 4 цифры случайное число в C++C++ Генерирование 4 цифры случайное число
Я использовал следующий код
#include<time.h>
int number;
number=rand()%1000;
srand (time(NULL));
, но его не дает общее случайное число
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
в этом случае. Я их не считаю, но на всякий случай я освещаю все базы.
НТН
Я уверен, что OP может самостоятельно определить первую часть. И, кстати, факт, что 0045 не является 4-значным числом, является спорным. Важным моментом является сначала вызвать 'srand', чтобы получить« общее случайное число ». – log0
+1. И могу ли я также предположить, что, если есть даже вероятность того, что эта программа будет выполняться несколько раз в узком цикле, вставьте 'sleep (1)' before 'srand (time (0))', чтобы семена были лучше выбран. Это позволит избежать неизбежных «почему мои случайные последовательности не случайны?» вопросы :-) – paxdiablo
Не забудьте позвонить 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();
Убивать воробья с помощью ядерного оружия, не так ли? :) Kidding, мне нравится boost, но это может быть слишком много для op, который, кажется, новичок –
Хотя, честно говоря, он стандартный в C++ 0x, поэтому должен быть стандартным способом распространения чисел. – GManNickG
@GMan: Все равно, стандартно ли это слишком сложно для новичка. Я считаю, что это здорово, мы будем иметь это в стандарте, но, возможно, его нужно держать для промежуточных/продвинутых учеников. –
Вы должны сеять свой генератор случайного srand
до того вызова rand()
#include<time.h>
srand(time(NULL));
int number = rand() % 10000; // number between 0 and 9999
В качестве дополнения к принятому ответу, есть очень хорошая статья относительно надлежащего использования рандов() и srand () по адресу http://eternallyconfuzzled.com/arts/jsw_art_rand.aspx. – manneorama