我被要求在一个数组上使用FisherYates shuffle,该数组将使用函数从一个文件中获取(我设法做到了)。
int FisherYates(int *player, int n) { //implementation of Fisher
int i, j, tmp; // create local variables to hold values for shuffle
for (i = n - 1; i > 0; i--) { // for loop to shuffle
j = rand(); //randomise j for shuffle with Fisher Yates
tmp = player[j];
player[j] = player[i];
player[i] = tmp;
}
return player;
}
它基本上只需要打乱玩家列表并返回输出,这样我就可以在main()中打印出来。
如果有人能告诉我如何修改代码使其工作,我将非常感激,因为在这个版本中,我在编译时得到一个错误:
invalid conversion from 'int*' to 'int' [-fpermissive]
2条答案
按热度按时间7gcisfzg1#
player
中已经有了结果,所以返回void
应该可以。Reference for Fisher-Yates
mspsb9vt2#
关于函数的两个要点:
rand()
要求调用 * srand(...) * 作为数字生成器的种子。字符串(clock());
对于(i=n-1; i〉0;i--){ // for循环来混洗j =兰德()%n;//用Fisher Yates随机化j进行 Shuffle ...
int FisherYates(int *player, int n)
原型化为返回int
,但您返回的是pointer to int
选项将按照Tectrendz的建议执行,只需更改原型以返回void
(因为player
在参数中返回),***或***修改函数返回一个int *
,但这是多余的,因为(int *player,...
允许通过参数返回值。