指定1-5,生成1-7随机函数

给定一个能生成等概率1-5随机数的函数,请你写一个自定义函数生成等概率1-7的随机数

思路:我们要得到1-7,那么只要得到(0-6)+1即可,(1-5)转换为(0-4)
,那问题就是怎么把(0-4)转换为(0-6)的问题了

思路一:

    //给定函数,随机生成1-5
    public static int f(){
        return (int)(Math.random()*5)+1;
    }
    //随机生成0-4
    public static int a(){
        return f()-1;
    }
    //随机生成0-24
    //我们就可以分为三块等概率0-6和21,22,23,34
    //0-6,7-13,14-20,  21,22,23,24
    public static int b(){
        return a()*5+a();
    }
    //随机生成1-7
    public static int g(){
        int t=0;
        do{
            t=b();
        }while(t>20);
        //do-while作用就是当b()生成21,22,23,24时重新执行do里的方法
        return t%7+1;
    }

思路2:
由(0-5)转换为(0-1),再由(0-1)去生成(0-6)

    //给定函数,随机生成1-5
    public static int f(){
        return (int)(Math.random()*5)+1;
    }
    // 利用f()函数生成等概率0-1的随机数
     public  static int q(){
        int m=0;
        do {
            m=f();
        }while (m==3);
        //把1-5分为1-2,3,4-5
        return m<3 ? 0:1;
     }
     //利用0-1生成0-6,在加1就是1-7
    public static int g2(){
        int m=0;
        do {
            m=q()<<2+q()<<1+q();
            //q()<<2= 0-4
            //q()<<1= 0-2
            //q()   = 0-1
        }while (m==7);
        return m+1;
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值