最近学校开设了算法课,大一的时候都没有好好学,现在恶补一下。会把一些比较好玩的题写上来分享,希望大家有更好的解法可以告诉我。
1.蛮力算法
1.蛮力法求解问题:
猴子到森林里采香蕉,森林距离家里100米,猴子的背包最多可以放下100个香蕉。但是,贪吃的猴子每行动1米需要吃1个香蕉,假设森林里香蕉足够多的情况下,问猴子最多可以携带多少香蕉回到家里。(试通过蛮力法计算,给出计算过程及结果即可)
分析:
森林 X X ………….. X X 家
100 100 100 ………….. 100-X 100-2X
|——|——|——|——|——|——|——|
假设猴子每走X米就把香蕉放下,再回去前一个点拿香蕉,保证每次重新出发时包里有100个香蕉,除了在离家X米的时候有100个香蕉。最后到家有100-X个香蕉
100/X要为整数,则X可取{1,2,4,5,10,25,50},穷举法求最优解
X | 可获得香蕉 |
1 | 99 |
2 | 98 |
4 | 96 |
5 | 95 |
10 | 90 |
25 | 75 |
50 | 50 |
2.有N个外观完整的球和一个不带砝码的天平,N个球中有一个球的质量比其它的都要轻,其它(N-1)个球质量相同。问需要至少多少次称量,才能保证找出那个轻的球。
Answer:
设m为一共要称量的次数,则有
3^(m-1)<n<=3^m
则log₃n<=m<log₃(n+1)