【问题标题】:randomly increment through an array, c++通过数组随机递增,c ++
【发布时间】:2019-02-28 21:17:47
【问题描述】:

我很难理解使用“rand()”从整数数组中随机读取数字的概念。我创建了一个介于 1-3 之间的随机数生成器,并希望输出一个数组的索引,然后让生成器从前一个索引中随机输出下一个生成的数字,直到它到达数组的末尾。例如:

  1. 'rand()'= 3, 'array[2]'

  2. 'rand()' = 2, 'array[4]'

  3. 'rand()' = 3, '数组[7]'

如果这有意义?等等等等。

我目前使用的代码只是输出一个随机数序列。我已经放置了一个“种子”,所以我可以查看相同的序列。

int main() 
{ 
 int arrayTest[20] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 
 17, 18, 19, 20};   
 srand(4);
 for(int i = 0; i < 20; i++)  
    {  
     arrayTest[i] = (rand() % 3);
     cout << arrayTest[i] << endl;
    }




}

【问题讨论】:

  • 我想你想说的是你试图以随机增量迭代一个数组,而不是一次一个元素。但这措辞如此混乱,以至于完全不清楚。请让你的问题更清楚。即使是所示的示例,据称生成随机数 1-3,最终也会产生值 5 和 6。
  • 您正在使用带有常数的 srand,这将使输出始终相同。您应该使用另一种随机性来源,例如时间。此外,您应该使用 C++11 的随机数生成器 Link here
  • @mamg22 再次阅读问题。如果有一件事很清楚,那就是种子被设计成相同的重复结果。
  • @SergeyA 哦,我没看到
  • @mamg22 是的,请阅读我先放的内容。问题已经解决了

标签: c++ arrays indexing srand


【解决方案1】:

我有点猜测你真正想要什么。但它似乎想对索引进行随机增量,并使用该索引在循环中从数组中读取。

所以这段代码不会做任何你想做的事情

 arrayTest[i] = (rand() % 3);

它使用顺序(即非随机)索引将随机值写入(而不是读取)数组。

这就是我认为你想要的

int main() 
{ 
    int arrayTest[20] = { ... };   
    srand(4);
    int index = -1;
    for(int i = 0; i < 20; i++)  
    {  
         index += (rand() % 3) + 1; // add random number from 1 to 3 to index
         if (index >= 20) // if index too big for array
             index -= 20; // wrap around to beginning of array
         cout << arrayTest[index] << endl; // read array at random index, and output
    }
}

但我不完全确定,尤其是您的 testArray 的数字 1 到 20 的顺序让我有点怀疑。如果你解释一下为什么你想做任何你想做的事情会更清楚一点。

【讨论】:

  • 首先,为我糟糕的英语道歉。将“rand()”想象成一个骰子,假设第一个生成的数字是 3 - 这意味着它落在 testArray[2] 上。要生成的第二个数字是 2 - 这意味着它落在 testArray[4] 上,依此类推,直到 for 循环结束。再次道歉。
  • @C.Mann 好吧,这听起来很像我上面写的。试一试。
  • 是的,数组中从 1-20 排序的数字是有目的的。例如。如果要生成的第一个数字是 3,那么它会落地输出 testArray[2] //输出是 = {3},第二个要生成的数字是 2 - 落地 testArray[4] //输出是 = {5}跨度>
  • @C.Mann 所以你不需要数组。 arrayTest[i] == i + 1 总是,所以cout &lt;&lt; arrayTest[index] &lt;&lt; endl;cout &lt;&lt; index + 1 &lt;&lt; endl; 完全相同。所以你可以摆脱数组,我想无论如何它可能会让你感到困惑。
  • 这仍然不正确,因为我需要获取数组的元素。无论如何感谢您的帮助
猜你喜欢
  • 2021-07-07
  • 2017-07-25
  • 1970-01-01
  • 1970-01-01
  • 2018-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-28
相关资源
最近更新 更多