/* rand example: guess the number */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main ()
{
int iSecret, iGuess;
/* initialize random seed: */
srand ( time(NULL) );
/* generate secret number: */
iSecret = rand() % 10 + 1;
do {
printf ("Guess the number (1 to 10): ");
scanf ("%d", &iGuess);
if (iSecret < iGuess) puts ("The secret number is lower");
else if (iSecret > iGuess) puts ("The secret number is higher");
} while (iSecret != iGuess);
puts ("Congratulations!");
return 0;
}
4条答案
按热度按时间khbbv19g1#
1)你不应该使用
rand()
,它有坏的分布,短周期等。2)你不应该在
MaxValue % x != 0
的时候使用%x
,因为你会弄乱你的均匀分布(假设你不使用兰德()),例如32767 % 10 = 7
所以数字0-7更有可能得到查看更多信息:Going native 2013 - Stephan T. Lavavej - rand() Considered Harmful
你应该使用类似于:
我在我的代码中使用这样的东西:
注意:实现不是线程安全的,并且为每个调用构造一个分发。这是没有效率的。但您可以根据需要修改它。
8cdiaqws2#
iSecret变量将提供1到10之间的随机数
ukxgm1gy3#
请参见
boost::random
中的均匀整数分布示例:http://www.boost.org/doc/libs/1_46_1/doc/html/boost_random/tutorial.html#boost_random.tutorial.generating_integers_in_a_range
b4qexyjb4#
random_integer = rand()%10;
应该可以做到这一点。random_integer = rand()%11;
表示0到10之间的所有数字,包括10…