大小为n的整数数组。我需要生成一个数组的随机排列,给定一个函数rand_n(),它返回一个介于1和n之间的整数,包括两者,具有相同的概率。我知道java中的随机函数,但我想用C实现它。
答案 0 :(得分:1)
也许mersenne twister就是您要搜索的内容。
答案 1 :(得分:0)
#include <stdio.h>
#include <stdlib.h>
int randint(int min, int max)
{
if (min>max)
{
return max+(int)((min-max+1)*rand()/(RAND_MAX+1.0));
}
else
{
return min+(int)((max-min+1)*rand()/(RAND_MAX+1.0));
}
}
答案 2 :(得分:0)
您可以按如下方式创建自己的:
int rand_n( int N )
{
return ( rand() % N ) + 1;
}
rand()
在stdlib.h
中声明。
答案 3 :(得分:0)
如果我理解正确,那么问题不在于编写PRNG,而在于使用预定义的rand_n函数来编写一个算法来对数组进行混洗。写一个PRNG并不简单,我怀疑他们在接受采访时会问你。但是改组算法是一个不同的故事。这是一个以伪代码形式出现的问题:
迭代1:
迭代2:
......抓住我的漂移?
答案 4 :(得分:0)
看一下Fisher-Yates shuffle。这通过随机交换元素产生数组的随机排列(因此使用简单的rand_n
类型函数来选择元素。)