美文网首页
10_4随机函数练习题

10_4随机函数练习题

作者: X_Y | 来源:发表于2017-10-22 16:42 被阅读8次

    给定一个等概率随机产生15的随机函数,除此之外,不能使用任何额外的随机机制,请实现等概率随机产生17的随机函数。(给定一个可调用的Random5::random()方法,可以等概率地随机产生1~5的随机函数)

    // 以下内容请不要修改
    class Random5 {
        public:
            static int randomNumber();
    };
    
    class Random7 {
        public:
            int rand5() {
                return Random5::randomNumber();
            }
            // 以上内容请不要修改
    
    
            int randomNumber() {
                // 代码写这里,通过rand5函数随机产生[1,7]
                // 先产生一个可以生产1-10的随机数,然后,直到产生了1-7的数之后,结束
                int res = -1;
                do{
                    int a = rand5();
                    while(3 == a){
                        a = rand5();
                    }
                    a /= 4;
                    int b = rand5();
                    res = a * 5 + b;    
    
                }while(res > 7);
                return res;
            }
    };
    
    

    另一种实现

    // 以下内容请不要修改
    class Random5 {
        public:
            static int randomNumber();
    };
     
    class Random7 {
        public:
            int rand5() {
                return Random5::randomNumber();
            }
            // 以上内容请不要修改
     
     
            int randomNumber() {
                // 代码写这里,通过rand5函数随机产生[1,7]
                 
                int res = 5 * (rand5() - 1) + rand5() - 1;
                while(res>20){
                    res = 5 * (rand5() - 1) + rand5() - 1;
                }
                return res%7 + 1;
            }
    };
    
    

    相关文章

      网友评论

          本文标题:10_4随机函数练习题

          本文链接:https://www.haomeiwen.com/subject/aqxnuxtx.html