【问题标题】:Consecutive numbers in random order随机顺序的连续数字
【发布时间】:2014-02-26 18:20:09
【问题描述】:

如何生成包含一组连续数字但顺序随机的数组?例如,连续的数字是从 8 到 100(不重复),我想要的是一个包含所有这些数字但序列是随机的数组。

【问题讨论】:

标签: c++


【解决方案1】:

我想 8 和 100 都包含在范围内。

#include <algorithm>
#include <numeric>
#include <iterator>

int main()
{
   const size_t N = 93;
   int a[N];

   std::iota( std::begin( a ), std::end( a ), 8 );
   std::random_shuffle( std::begin( a ), std::end( a ) );
}

如果 8 是您帖子中的拼写错误,而您的意思是 0,那么代码将如下所示

   const size_t N = 101;
   int a[N];

   std::iota( std::begin( a ), std::end( a ), 0 );

【讨论】:

  • std::itoa 是什么?我在我的标准副本中找不到它(并且您传递给它的参数看起来不像旧 Unices 中这个名称的函数)。
  • @lisyarus 我看错了;我读过itoa(所有早期的Unices 中都有,但没有成为任何标准)。这也是我在标准中搜索的内容。
【解决方案2】:

我假设您是学生并且是编程新手,因此应该告诉一些基础知识。

rand() 生成随机数。

如果您希望数字在特定范围内,则取其模式,例如

rand()%93;    // generate random numbers from 0-92

同样, (rand()%93)+8 // 将生成 8-100 之间的数字

此外,为了检查重复项,您可以将数字与已存储在数组中的数字进行比较。

【讨论】:

  • 与已经生成的数字相比可能会非常慢,而且时间成本很大程度上取决于使用的伪随机数生成算法。生成一个序列然后改组它是一个更好的主意,因为它的时间成本是线性的。
  • 如果在无限长的时间后生成一个数字(比如说 0)怎么办?
猜你喜欢
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-28
  • 2015-02-14
  • 1970-01-01
相关资源
最近更新 更多