zoukankan      html  css  js  c++  java
  • Simulate a seven-sided die using only five-sided

    问题描述:

    如题

    转述一下问题,就是说你现在有一个正五面体骰子,然后你怎么用这个正五面体骰子去模拟一个正七面体骰子。

    这个问题我接触到几种方法,下面一一阐述。

    方法一:

    rand7()=( rand5()+rand5()+rand5()+rand5()+rand5()+rand5()+rand5() ) % 7 + 1

    这个方法可以这么来理解五面体筛子实验七次,点数和在7到35之间,点数和的分布是均匀的。所以模7加一就可以近似模拟七面体筛子了。

    评价:该方法简单易理解,然而只是“近似”七面体筛子,因为数字1-7并不是均匀出现的。

    方法二:

    function rand7() {
    throw the dice twice and perform the following checks
    1,1 return 1
    1,2 return 2
    1,3 return 3
    1,4 return 4
    1,5 return 5
    2,1 return 6
    2,2 return 7
    2,3 return 1
    2,4 return 2
    2,5 return 3
    3,1 return 4
    ...
    ...
    ...
    5,1 return 7 [at this point we have returned numbers from 1 to 7, 3 times each]
    5,2 rand7()
    5,3 rand7()
    5,4 rand7()
    5,5 rand7()
    }

    显然,该方法看起来可以做到完全模拟正七面体,其实不然,稍微分析一下你会发现你陷入了无穷循环。从逻辑上来说,这个方法为了得到原先不存在的rand7()而递归调用不存在的东西(也就是rand7()),那么显然这种方法是不可以的。

    方法三

    不可能,我们不可能用五面体筛子去完全模拟七面体筛子。

    下面给出证明。

    首先我们注意到5跟7是互质的,那么无论什么方法用五面体筛子去模拟七面体筛子,总要实验五面体筛子好多次,我们假设n次,那么得到实验结果有多少种情况呢?

  • 相关阅读:
    13、SpringBoot开启DevTools
    11、SpringBoot整合Junit
    10、SpringBoot之异常处理
    9、SpringBoot整合Mybatis
    8、SpringBoot整合JDBC
    7、SpringBoot整合Thymeleaf
    6、SpringBoot整合Freemarker
    5、SpringBoot整合JSP
    4、SpringBoot之文件上传
    leetcode787.K站中转最便宜航班
  • 原文地址:https://www.cnblogs.com/xubenben/p/3388432.html
Copyright © 2011-2022 走看看