编程珠玑第十二章习题


1. rand()一般返回约15个随机位。用该函数实现bigrand(),和randint(l,u) 要求前者至少返回30个随机位,后者返回【l,u】范围内的一个随机整数。

int bigrand()
{
   return RAND_MAX*rand()+rand();
}
int randint(int l,int u)
{
   return l+bigrand()%(u-l+1);
}

2.在0——n-1范围内选择m个整数,在该范围内随机选择一个数i,然后输出i~i+m-1(有可能会绕回到0)。每个整数的概率都是m/n,但特定子集的选择概率明显偏大?

   


8.如何从0~n-1中随机选择m个整数,使得最终的输出顺序是随机的?如果允许有重复整数,如何生成该列表?又要求按随机顺序输出。

void gendup(int m,int n)
{
    for(int i=0;i<m;i++)
        cout<< bigrand()%n;
}

9.如果m接近于n,产生的许多随机数都要被丢弃,能否给出算法,使得最坏的情况下也只是用m个随机数?

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值