问题:题目下面的程序可以从0....n-1中随机等概率的输出m个不重复的数。这里我们假设n远大于m。
括号里应填写什么?
.......
knuth(int n, int m)
    srand((unsigned int)time(0)); 
    for (int i = 0; i < n; i++) { 
        if (  
         { 
            cout << i << endl;
            (  );
         }
     }
........
A: rand()%(n-i)<=m m--
B: rand()%(n-i)<m m-- (正确答案)
C: rand()%(n-i)>=m m++
D: rand()%(n-i)>m m++
分析:第一个for循环i从0到n-1,if判断语句条件成立则输出i,而i的值每次都是不一样的。
rand()%(n-i)<m
当i=0时,rand%(n-i)取值范围为0~n-1,总共n个数,只要rand()%(n-i)<m,输出i=0的概率就为m/n。(小于号的原因是从0开始,取到m-1就总共m个数)。
当i=1时,rand%(n-i)取值范围为0~n-2,总共n-1个数,当i=0输出时,执行m--,当i=0未输出时,m的值不变,根据条件概率公式,输出i=1的概率p=(m/n)*((m-1)/(n-1))+(1-m/n)*(m/(n-1))=m/n。
以此类推,每个数被输出的概率为m/n。

下面的程序可以从0....n-1中随机等概率的输出m个不重复的数。(假设nm)相关推荐

  1. Java 随机数练习之从26个英文字母(含大小写)和 0 - 9 数字中随机抽出4个字符,然后拼接成一个随机验证码

    从26个英文字母(含大小写)和 0 - 9 数字中随机抽出4个字符,然后拼接成一个随机验证码 判断输入的验证码 与 随机生成的验证码 是否相同(忽略大小写) 如果正确,则系统提示,"恭喜你验 ...

  2. C语言经典程序之:求十个整数中的最大最小数并输出(指针)

    #include "stdio.h" void max(int *p,int N) /*求最大数的函数(void--无返回值),定义指针*/ {int i,max=*p; /*定义 ...

  3. Java黑皮书课后题第8章:*8.10(最大的行和列)编写一个程序,在一个4*4的矩阵中随机填入0和1,打印该矩阵,分别找到第一个具有最多1的行和列

    *8.10(最大的行和列)编写一个程序,在一个4*4的矩阵中随机填入0和1,打印该矩阵,分别找到第一个具有最多1的行和列 题目 题目描述与运行示例 破题 代码 题目 题目描述与运行示例 8.10(最大 ...

  4. 程序员新手 0年份等级 指导(一) 开发人员IT架构总览

    程序员新手 0年份等级 指导(一) 开发人员IT架构总览 程序员新手 0年份等级 指导(一) 开发人员相关IT架构总览之职能分解 开发人员IT架构总览 一.职能分解 软件项目的主要组成大体上按照一个项 ...

  5. Java黑皮书课后题第7章:*7.7(统计个位数的数目)编写一个程序,生成0和9之间的100个随机整数,然后显示每一个数出现的次数

    *7.7(统计个位数的数目)编写一个程序,生成0和9之间的100个随机整数,然后显示每一个数出现的次数 题目 题目描述 破题 代码 运行示例 题目 题目描述 *7.7(统计个位数的数目)编写一个程序, ...

  6. java数据库防火墙,数据库centos7防火墙导致java程序访问mongodb3.0.1时报错的问题分析...

    环境描述: 数据库:mongodb3.0.1 数据库系统:centos7,(虚拟机,最小安装) 数据库驱动:mongo-Java-driver-3.0.0.jar 问题描述:shell环境下用mong ...

  7. 微信(支付宝)小程序蓝牙4.0线上项目

    需求 : 微信(支付宝)小程序链接BLE4.0 ,发送指令到蓝牙硬件 过程 : 小程序分为安卓和ios两套系统,支持连接BLE 蓝牙 ,其中会遇到机型问题(其中安卓,华为荣耀机型,小米,问题很多,稍微 ...

  8. 定时器中断实验 编写程序使定时器0或者定时器1工作在方式2,自动重装载模式,定时500ms使两位数码管从00、01、02……98、99每间隔500ms加1显示。

    编写程序使定时器0或者定时器1工作在方式2,自动重装载模式,定时500ms使两位数码管从00.01.02--98.99每间隔500ms加1显示. 程序: #include <reg51.h> ...

  9. 定时器中断实验 编写程序使定时器0或者定时器1工作在方式1,定时500ms使两位数码管从00、01、02……98、99每间隔500ms加1显示。

    编写程序使定时器0或者定时器1工作在方式1,定时500ms使两位数码管从00.01.02--98.99每间隔500ms加1显示. 程序: #include <reg51.h> #defin ...

最新文章

  1. 机器学习应用的未来是什么?微型化
  2. CC2530的串口实验
  3. 图解NHibernate项目框架
  4. 龙的建模竟然能建成这个样子:向大佬低头
  5. imageloader 的 java.security.cert.CertPathValidatorException
  6. leetcode 223. Rectangle Area | 223. 矩形面积(Java)
  7. openshift_在OpenShift上扩展Java EE微服务
  8. Apache Subversion 1.7.2发布,开源版本控制工具
  9. Java笔记-Spring Boot Webservice中对指定namespace及localpart进行拦截
  10. LeetCode 985 Sum of Even Numbers After Queries 解题报告
  11. Notepad++无法修改中文解决办法
  12. OSPF协议基本原理笔记
  13. 截图热键冲突:关闭360截图功能建议使用QQ截图
  14. 不用再期待别人的认可
  15. 不吹不黑,思购甄选现在还能玩吗?
  16. MacDroid for Mac(安卓手机文件传输助手)
  17. 什么是以太网变压器?常用产品有哪些?百兆千兆万兆网络变压器产品图电路图原理图
  18. 有关于tftp32无法下载
  19. WJMZBMR在成都赛区开幕式上的讲话
  20. 施努卡:活塞环的三隙检测方法(活塞环三隙分别是什么)

热门文章

  1. 2012年CIO最关心的十大安全问题
  2. Dotnet程序集自动生成版本号
  3. 财务一体化项目,进度与计划31
  4. 1122. 数组的相对排序
  5. 10-1 channel
  6. 3-6 字符和字符串处理
  7. 【免费毕设】基于PHP实现的WEB图片共享系统(源代码+论文)
  8. 【写作技巧】毕业论文格式要求
  9. java数字高低呼唤_记录某电话交换台 5 分钟内接到的呼唤次数,则样本空间 S={0,1,2, … ,n, … }_Java答案_学小易找答案...
  10. java字符串不可变_Java字符串真的是不可变的吗?