【问题标题】:Why does rand()%10+1 give me a number between 1-10? [closed]为什么 rand()%10+1 给我一个 1-10 之间的数字? [关闭]
【发布时间】:2021-02-11 10:38:26
【问题描述】:

我是编程新手

所以我实际上是想弄清楚一些事情

为什么 rand()%10+1 给我们一个 1-10 之间的数字,而 32767%10 实际上是 7?

【问题讨论】:

  • 因为后面加了 1。 rand() % 10 介于09 之间,所以rand() % 10 + 1 介于110 之间。
  • 必须链接到rand() Considered Harmful
  • 您的标题与您的问题不符。
  • 您可能会将rand()RAND_MAX 混淆。
  • @user4581301 可能还为时过早。

标签: c++ random random-seed


【解决方案1】:

我想我明白了你困惑的根源。

您在标题中提及rand()%10 并在问题正文中提及rand()%10+1 的事实使这变得困难。

你问:

为什么rand()%10+1 给我们一个1-10 之间的数字而32767%10 实际上是7?

这是因为函数N%10 不是单调递增的。随着N 的值增加,N%10 的值会上下波动。

我认为你假设:

  • 32767rand() 返回的最大值(可以是,但在我的系统上是2147483647,但这不影响重点);和
  • 如果32767rand()返回的最大值,那么32767%10,也就是7,一定是rand()%10的最大值。

您的第二个假设是错误的。对于任何值N(我们将忽略负值),N%10 是其十进制表示的最后一位。如果rand() 返回 9,那么rand()%10 将是 9,rand()%10+1 将是 10——大于 32767%10+1 的值。

【讨论】:

    【解决方案2】:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    
    {
        int randomnumber;
        randomnumber = rand() % 10;
        printf("%d\n", randomnumber);
        return 0;
    }
    

    当你运行这段代码时,它会生成一个从 0 到 10 的数字,因为它后面有数字 10(因为你想 随机到 10 所以这就是为什么a 10) 但它只会从 0 到 9 生成。这就是为什么最后需要一个 +1 来生成 1 到 10 的随机数。就是这样。

    【讨论】:

    • 这没有回答问题并且措辞不佳。
    • 也应该提到srand()
    猜你喜欢
    • 2016-04-18
    • 2018-11-12
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    • 1970-01-01
    • 2010-10-17
    • 2016-04-23
    • 1970-01-01
    相关资源
    最近更新 更多