gpt4 book ai didi

c - 找一个长度为1到10的随机数,使用数字0到9不重复

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:18:54 26 4
gpt4 key购买 nike

我试图找到一个具有 1 到 max 数字(max < 10)的随机数。

srand((int) time(NULL));

answer = ((rand() % max) + 1);

但是:

0,...9 is only allowed to be used once.

我发现等待 rand() 偶然创建这样一个数字需要很长时间,所以我假设必须有一种方法来创建一个运行总计,其中每次一个数字添加后进行比较。

最佳答案

如果您要查找 n 的整数从 0 到 9 的数字没有重复(你的问题很难解释),那么下面就足够了。

思路是把0到9的所有数字都放在一个帽子里,然后一个一个的画出来。将每个附加到您正在构建的随机整数值。

帽子是一个初始设置为 0 到 9 的数组。

当帽子有k时画一个数字其中的元素,计算一个随机索引 j[0..k-1] 范围内并从数组中获取该元素。然后将最后一个(k-1 个)元素向下复制到位置j ,它“删除”它。剩余未选取的数字现在在 [0..k-2] 中,您可以重复此过程直到完成。

将数字 d 附加到整数值等同于说

val = 10 * val + d

将这些想法放在一起,您将得到以下内容。请注意,这允许第一个位置为 0,因此当打印时没有前导零时,结果实际上可能少于 n 个数字。

unsigned random_unrepeated_digits(int n) {
int i, digits[] = { 0,1,2,3,4,5,6,7,8,9 };
unsigned val = 0;
for (i = 0; i < n; i++) {
int k = 10 - i, j = rand() % k;
val = 10 * val + digits[j];
digits[j] = digits[k - 1];
}
return val;
}

关于c - 找一个长度为1到10的随机数,使用数字0到9不重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20157958/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com