【问题标题】:how to randomly print 1 to 10 in C [duplicate]如何在C中随机打印1到10 [重复]
【发布时间】:2011-04-22 01:20:46
【问题描述】:

可能的重复:
Generate Random numbers uniformly over entire range
In C, how do I get a specific range of numbers from rand()?

我想在 C 中生成随机数。它在 stdlib.h 中有 rand() 和 srand() 函数,但它给了我非常大的数字。但我只想要数字 b/w 1 到 10。那么,是否有可能,如果是,那么如何?如果可以从 a-z 随机生成字符。

【问题讨论】:

标签: c random


【解决方案1】:

最简单的方法是使用模运算符将结果缩减到您想要的范围。执行rand() % 10 会给你一个从 0 到 9 的数字,如果你给它加 1,即1 + (rand() % 10),你会得到一个从 1 到 10(含)的数字。

在其他人抱怨之前,这可能会稀释随机分布,但是,对于简单的目的,它应该可以正常工作。

【讨论】:

  • 另外,不要忘记为随机数生成器播种,否则在某些系统上每次都会得到相同的序列。
  • OP 已经提到了srand 所以我想他知道这件事。
  • 模运算符根据最低有效位为您提供答案,在某些 RNG 中,其随机性远低于最高有效位。我宁愿选择除法。
【解决方案2】:

模数 (%) 有一些偏差。

稍微优选的是缩放随机数:

int aDigit = (int) (((double)rand() / (RAND_MAX+1)) * 9 + 1);
printf("%d", aDigit);

分解:

((double)rand() / RAND_MAX)

将生成一个介于 0.0 和 0.99999 之间的双精度数

* 10

将其转换为 0.0 到 9.9999 的数字。

+ 1;

将其转换为 1.0 - 10.999

(int)

将其转换为 1-10,这是您要求的。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-09-09
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 2018-06-27
  • 1970-01-01
  • 2011-06-09
相关资源
最近更新 更多