创建随机数

这是我的第一个问题,我正在做一个小游戏,而且为了分配角色,我需要随机数字。 我有这个代码,但有可能数字不重复? 谢谢。

void giveroles() { srand(time(NULL)); int r = rand() % i + 1; switch ( r ) { /* ... */ } } 

如果要随机分配一小组数字,而不是随机生成它们,请创建所需数字列表,然后随机化列表顺序(遍历列表,随机交换条目)。

例如:

 int cards[52]; for(int i = 0 ; i < 52 ; i++) { cards[i] = i; } for(int i = 0 ; i < 1000 ; i++) { int r1 = rand()%52; int r2 = rand()%52; int t = cards[r1]; cards[r1] = cards[r2]; cards[r2] = t; } for(int i = 0 ; i < 52 ; i++) { printf("%d\n", cards[i]); } 

为了完整起见,有人指出以这种方式改组是有偏见的。 这是一个应该是公正的变化:

 cards[0] = 0; for(int i = 1 ; i < 52 ; i++) { int r = rand() % (i+1); cards[i] = cards[r]; cards[r] = i; } 

(应该进一步注意,获取rand()的模块也可能有偏差,因为rand()的范围不是偶数倍)

取出行srand(time(NULL)); 。 一般情况下,您应该只在程序中执行一次,例如在main()的开头,以便随后调用后续调用rand()使用的种子。

如果您不想重复随机数,解决方案是跟踪您之前使用过的随机数,如果您在现有数字列表中获得“点击”,请再试一次。

另外,使用srand(time(NULL)); 应该只进行一次。 我怀疑这更像是你实际问的问题。