C++ 试图一次取一个随机数字

C++ 试图一次取一个随机数字,c++,string,random,int,C++,String,Random,Int,我不熟悉cpp编程,也不熟悉stackoverflow 我有一个简单的情况和一个需要花费更多时间来解决的问题,所以我想我应该在这里问一下 我想一次从rand()中取一个数字。我已经设法去掉了这个数字,但是我不能将它转换成我需要的int,因为它被用作数组索引 有人能帮忙吗?我会很感激的 此外,如果有人有一个很好的解决方案来获得均匀分布的10进制随机数,我也希望如此。。。当然,兰特马克斯也不全是9,我们没有 KTM您可以使用模运算符来获取兰德返回的数字 int digit = rand()%10;

我不熟悉cpp编程,也不熟悉stackoverflow

我有一个简单的情况和一个需要花费更多时间来解决的问题,所以我想我应该在这里问一下

我想一次从
rand()
中取一个数字。我已经设法去掉了这个数字,但是我不能将它转换成我需要的
int
,因为它被用作数组索引

有人能帮忙吗?我会很感激的

此外,如果有人有一个很好的解决方案来获得均匀分布的10进制随机数,我也希望如此。。。当然,兰特马克斯也不全是9,我们没有


KTM

您可以使用模运算符来获取兰德返回的数字

int digit = rand()%10;
至于你的第一个问题,如果你有一个字符数字,你可以减去“0”的值得到这个数字

int digit = char_digit - '0';

你可以用模运算符得到兰德返回的数字

int digit = rand()%10;
至于你的第一个问题,如果你有一个字符数字,你可以减去“0”的值得到这个数字

int digit = char_digit - '0';

如果你想要一个0到9的迂腐的均匀分布,你可以

  • 假设
    rand()
    本身是均匀分布的。(并非总是一个好的假设。)

  • 根据需要再次调用
    rand()

    int ran10(void) {
      const static int r10max = RAND_MAX - (RAND_MAX % 10);
      int r;
      while ((r = rand()) >= r10max);
      return r%10;
    }
    
  • 示例:

    如果
    RAMD_MAX
    为32767,
    r10max
    的值为32760。在32760到32767范围内的任何rand值都将被抛出,并将获取一个新的随机值。

    如果想要0到9的迂腐的均匀分布,可以

  • 假设
    rand()
    本身是均匀分布的。(并非总是一个好的假设。)

  • 根据需要再次调用
    rand()

    int ran10(void) {
      const static int r10max = RAND_MAX - (RAND_MAX % 10);
      int r;
      while ((r = rand()) >= r10max);
      return r%10;
    }
    
  • 示例:

    如果
    RAMD_MAX
    为32767,
    r10max
    的值为32760。在32760到32767范围内的任何rand值都将被抛出,并将获取一个新的随机值。

    虽然速度不如模算术实现(如
    rand()%10
    )快,但这将返回均匀分布的整数,并避免某些伪随机数生成器中出现的最低有效位的周期性(请参阅)


    虽然速度不如模算术实现(如
    rand()%10
    )快,但这将返回均匀分布的整数,并避免在某些伪随机数生成器中出现最低有效位的周期性(请参阅)


    你愿意打破C++11吗?它让您可以使用
    std::uniform\u int\u distribution
    生成任意范围。您愿意突破C++11吗?它允许您使用
    std::uniform_int_distribution
    生成任意范围。此解决方案假设您愿意接受某些(小)偏差:此解决方案假设您愿意接受某些(小)偏差: