博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
灵活使用数组,高效生成随机数
阅读量:6499 次
发布时间:2019-06-24

本文共 1708 字,大约阅读时间需要 5 分钟。

以下是本人的一些分享,我热爱编程,希望能多交编程的爱好者,如果你也是其中一名,那么请加好友,大家关注一下,下面的文章是自己觉得一些有用的东西,留下来给自己当笔记,当然也希望能帮助到你,首先感谢你的阅读~!

  我们在学习和 的语法的时候,会学到数组,一般使用数组来记录一组数据,数组有下标索引,能够支持高效随机访问。
  曾经去一个公司应聘的时候做过这样一道笔试题目:
  如何高效生成M个不同的,范围在 [0 , N) 内的随机数(M<=N)。
  首先,一般情况下,我们拿到这个题目的时候,最容易想到的方法就是:
  方法一:
  /*
  1,在0~N的范围内生成一个随机数,
  2,然后在0~N的范围内生成第二个随机数,判断它是否与第一个相同,
  3,如果不同,存到数组中,
  4,如果相同,再生成一个,继续判断,
  5,重复以上操作,直到生成M个不同的随机数为止。
  */
  #include <iostream>
  using namespace std;
  void showNum( int randNum[], int m )
  {
  for (int j=0; j<m; j++)
  {
  cout << randNum[j] << ' ';
  }
  cout << endl;
  }
  int main(void)
  {
  cout << "请输入0~N范围中N的大小:" << endl;
  int n = 0;
  //确定N的范围
  cin >> n;
  cout << "请输入M的个数:" << endl;
  int m = 0;
  //确定M的个数
  cin >> m;
  //声明一个数组用于存放M个随机数
  int randNum[m];
  //设定随机种子
  srand(time(0));
  //因为无法确定需要遍历多少次才能得到想要的随机数,
  //所以此处for循环的退出条件为nIndex<m,也就是得到M个不同随机数后退出循环。
  for (int i=0,nIndex=0; nIndex<m; i++)
  {
  //生成一个随机数
  int temp = rand()%n;
  //nCount是记录此次随机值与已保存数值的不同个数
  int nCount=0;
  //如果此次生成的随机值不等于所有已保存数值,
  //那么nCount==nIndex,否则nCount<nIndex.
  for (int j=0; j<nIndex&&temp!=randNum[j]; j++)
  {
  nCount++;
  }
  if(nCount==nIndex){
  randNum[nIndex]=temp;
  nIndex++;
  }
  }
  // 显示得到的随机数
  showNum(randNum, m);
  return 0;
  }
  我笔试的时候就是这样写的, 所以我失去了一个C/C++软件工程师 <http://www.gdtarena.com>的工作机会。
  上面解决问题的思路是很清晰的,但是效率非常低,能不能生成M个不同的随机数呢?执行效率是很不稳定的,每次生成随机数所消耗的时间差异非常大,运气好的情况下,也许很快就能生成M个不相同的随机数,运气不好的话,一直都不能生成M个不相同的随机数,程序就会一直卡在那里。
  我们解决问题,不能靠运气!
  怎么去做这道题目呢?现在就请随广州达内岗顶中心 <http://www.gdtarena.com>的老师一起来探讨一个高效生成随机数的问题吧!
我们在通过不间断地学习,才能获取真正的知识,从来不满足现在所拥有的知识,不断进取是根本,在编程的世界里也是这样,我喜欢获得新的知识,为获得新的知识兴奋,希望你也是一样,学无止境!!!
更多知识请参阅广州达内

转载于:https://www.cnblogs.com/javaitpx/archive/2013/03/28/2986143.html

你可能感兴趣的文章
【Treap】bzoj1588-HNOI2002营业额统计
查看>>
第六周作业
查看>>
利用ZYNQ SOC快速打开算法验证通路(5)——system generator算法IP导入IP integrator
查看>>
指针和引用的区别
查看>>
转:strcat与strcpy与strcmp与strlen
查看>>
运行PHP出现No input file specified错误解决办法
查看>>
【重建】从FJOI2016一试谈起
查看>>
selenium之frame操作
查看>>
php 引入其他文件中的变量
查看>>
MYSQL体系结构-来自期刊
查看>>
PHP——图片上传
查看>>
mysql的基本知识
查看>>
exchange 2003配置ASSP 反垃圾邮件
查看>>
CQRS学习——最小单元的Cqrs(CommandEvent)[其一]
查看>>
webpack入门(二)what is webpack
查看>>
UnitOfWork以及其在ABP中的应用
查看>>
学习C语言必须知道的理论知识(第一章)
查看>>
for语句内嵌例题与个人理解
查看>>
眠眠interview Question
查看>>
Linux C++/Java/Web/OC Socket网络编程
查看>>