2012年3月7日

摘要: 《编程之美》4.6读书笔记问题:有一个桶,里面有白球和黑球各100个,规则如下:每次随机从桶中取出两个球如果是两个同色的球,就再放入一个黑球如果是两个异色的球,就再放入一个白球问:最后桶中只剩下一个黑球的概率是多少?解法:刚拿到这个问题,我的第一个想法就是用程序来计算各种情形出现的概率,然后再用递归求出最终的结果,不过可能因为程序存在一个bug,结果一直得到的是一个错误的结果下面列出作者给出的正确解法,看来思维僵化实在太可怕了!解法一:我们可一个用一个set(黑球数量, 白球数量)来表示桶中的黑球和白球的个数。从桶中取出球后,只可能是下列三种操作:取出的是两个黑球,则放回一个黑球:(-2, 0 阅读全文
posted @ 2012-03-07 17:52 aho 阅读(552) 评论(1) 推荐(1) 编辑
摘要: 问题:写一个程序,求两个正整数的最大公约数。如果这两个整数都很大,有什么简单的算法吗?思路: 求最大公约数是一个很基本的问题,早在公元前300年左右,欧几里得就在他的著作《几何原本》中给出了高效的解法——辗转相除法。 辗转相除法的原理很简单,设两数为a、b(a>b),b最大公约数(a,b)的步骤如下:用b除a,得a=bq......r1(0≤r1)。若r1=0,则(a,b)=b;若r1≠0,则再用r1除b,得b=r1q......r2 (0≤r2).若r2=0,则(a,b)=r1,若r2≠0,则继续用r2除r1,……如此下去,直到能整除为止。其最后一个非零除数即为(a,b)的最大公约数。 阅读全文
posted @ 2012-03-07 12:26 aho 阅读(420) 评论(0) 推荐(0) 编辑

导航