随笔分类 - 算法 数学 智力题
摘要:递归是是指函数/过程/子程序在运行过程中直接或间接调用自身而产生的重入现象。在我的印象中,我第一次接触递归是在C语言书中,让求n!的解,记得程序如下:int fun(int n){ if(n==1){ return 1; }else{ return fun(n-1); }}函数的调用对应着入栈,调用的结束对应着出栈,如上面的过程,假如传入的参数为3,程序run的时候,会先将fun(3)入栈,接着会将fun(2)入栈,最后会将fun(1)入栈,计算结束之后,会按照fun(1),fun(2),fun(3)依次出栈。从上面的过程我们可以看出,在每次计算的时候,该项的结果都会依附前一项,前一项的结..
阅读全文
摘要:问题描述:有1000个瓶子,其中有1个装的液体是有毒的,其余的999个装的是无毒的,有10只小白鼠用来测试,请找出装有毒的液体的瓶子。解法1:二分查找因为小白鼠测试的结果只有存活与死亡两种结果,所以每次测试可以分为两类,用二分查找的话,二叉树有十层,最坏情况下,给小白鼠喂药的次数为500+250+125+63+32+16+8+2+1=1001。解法2:将1000个瓶子编号,然后转换成二进制,二进制的位数为10位,如果不过10位,高位用0填充,然后将十进制数第一位为1的喂第一个小白鼠,十进制第二位为1的喂给第二个小白鼠,以此类推。。。最后死亡的小白鼠为1,活着的小白鼠为0,组成的二进制数转换成十
阅读全文
摘要:问题描述:小明在[1,100]之间猜数字。规则如下:1、如果猜的笑了,会提示小明猜的小了。2、如果猜的大了,只会提示对错,不会提示大小。3、如果有一次猜的大了,以后猜的无论大小,都只会提示错误,不会提示大小。问:至少几次可以猜对数字?第一次应该猜那个数字?解答如下:假设你猜的第一个数字是x。那么最少次数最小也要为x,因为第一次如果猜的大了,会提示你猜的大了,你可以确定正确数字的范围是[1,x-1],所以,你最坏需要再猜x-1次,总共也就是x次。如果你第一次猜小了,会提示你猜的小了,你可以确定正确数字的范围是[x+1,100],接下来,你需要猜第二次,同样面临的是猜大还是猜小,猜第二次的时候,你
阅读全文
浙公网安备 33010602011771号