【问题标题】:C++ generate 25 digit random number?C++生成25位随机数?
【发布时间】:2014-03-19 16:53:42
【问题描述】:

如何使用rand() 生成 25 位随机数并将其存储为字符串?

using namespace std;
int main(int argc, char **argv)
{
    srand(time(0));

     char arr[26] = {0};

   for(int i = 0; i < 26; i++){

      arr[i] = rand() % 10+ '0';
   }

   for(int i = 0; i < 25; i++){
     cout << arr[i] << " ";
   }

   return 0;
 }

此代码每次运行程序都会生成 25 个随机数。

同样,我需要生成一个 25 位数字并将其存储在一个数组中。

【问题讨论】:

  • 向我们展示您迄今为止的尝试以及问题所在。
  • 我知道如何生成 4-5 位数字。但不是 25 个数字...
  • 你知道std::srandstd::rand之间的区别吗?
  • @AMZZ:在您整理好问题之前,这将遭受严重的反对(甚至可能导致您被禁止提问)。你想要一个 25 位的随机数吗?如果是这样,你什么时候提到“字符数组”?
  • 仍不清楚。为什么标题与问题文本如此不同?你想要一个 25 位的随机数吗?

标签: c++ random


【解决方案1】:

这是我使用的逻辑,

int getRandom()
{
    const int size = 10;
    static int iBuff[10] = {0,1,2,3,4,5,6,7,8,9};
    static int iPivot = 0;

    if (iPivot >= size)
    {
        for(iPivot = 0; iPivot<size; iPivot++)
            iBuff[iPivot] = iPivot;

        iPivot = 0;
    }

    int iPos = rand()%(size-iPivot);

    int rand = iBuff[iPos+iPivot];

    //
    // swap values at iPos and iPivot
    //
    int temp = iBuff[iPivot];
    iBuff[iPivot] = iBuff[iPos+iPivot];
    iBuff[iPos+iPivot] = temp;

    iPivot++;
    return rand;
}


int main ()
{
    srand(time(NULL));
for (int iLoop=0; iLoop<25; iLoop++)
    cout<<getRandom()<<endl;

getchar();
return 0;
}

【讨论】:

  • 我不认为这会给你一个很好的分布,但它可能已经足够好了。另外,一点点const 会杀了你吗? ;)
  • 或许你能解释一下逻辑?我很难看到这是如何生成一个 25 位数字的;它看起来更像是生成一组 8 个数字的随机排列,如果您调用它超过 8 次,则会出现未定义的行为。
  • 嗯,我出去了一段时间,@mike 我的错,我没有正确阅读这个问题,我将其解释为,你想生成 0-25 之间的随机数......:p 和对于未定义的行为,如果调用超过 8 次,您可以在开始时添加检查,if(iPivot >= SIZE_MAX) return -1;
  • @Hulk 代码已更正,可以循环调用该函数,并且可以将输出存储到数组中,如问题中所述。关于不良做法和错误案例处理,我认为应该由将要使用代码的人来完成,至少我可以预料到。
  • @mike 需要进行细微更改来处理错误并将其从 8 位随机数转换为 25 位随机数。我希望我不需要告诉一些小事,我认为需要设置一个好的种子值才能使用 rand 函数。
【解决方案2】:

声明一个包含 26 个字符的数组。在从零到二十四(包括)的循环中,在'0''9' 之间生成一个随机值,并添加到数组中。使用字符串终止符终止数组。现在你有了一个包含 25 个随机十进制数字的 字符串


对于实际的随机数生成,我建议你研究新的 C++11 random number functionality,尤其是 std::uniform_int_distribution

将其与standard algorithm library 中的std::generate 函数结合使用,只需几行代码即可完成。

【讨论】:

  • 你能用 rand() 显示第一种方法的代码吗?
  • @AMZZ 这基本上就是您的问题,但您有 26 位而不是 25 位,因此会覆盖结尾的零并且没有字符串。
  • ok.. 但程序生成 25 个随机数 而不是 25 位随机数
  • @AMZZ 但是这些数字中的每一个都是一个数字吗?请记住,您在输出的每个数字之间打印一个空格。因为代码,如您的问题所示,应打印 25 个随机数字。
【解决方案3】:

srand 只初始化了伪随机数生成器。

你可能想做这样的事情:

char array[26];
for(int x = 0; x < 26 ; x++)
    array[x] = rand()%10 + '0';

array[25] = '\0'

【讨论】:

  • 谢谢。但它只生成 25 个随机数。我需要生成 25 位数字并将其存储在数组中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-18
  • 2015-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多