# 抓石子
A、B从一个石子堆里抓石子,交替进行,一个人可以抓1或者2颗,A先走,几种可能性。
// 和爬楼梯类似 f(n) = f(n-1) + f(n-2)
function getClimbingWays(n) {
if (n < 1) return 0
if (n === 1) return 1
if (n === 2) return 2
let a = 1, b = 2, temp = 0
for (let i = 3; i <= n; i++) {
temp = a + b
a = b
b = temp
}
return temp
}
最后抓的算负,16颗的情况下,A、B有必胜可能么(谁先抓,怎么抓,谁必胜)。
巴什博奕(Bash Game):
只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个.最后取光者得胜
结论:若
n%(m+1)=0
,则先手必败,否则先手必胜
显然,如果n=m+1
,那么由于一次最多只能取m
个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。 引入一个概念,奇异局势。当面对这个局势时则会失败。
奇异局势的判定:
一般的奇异局势是
n=(m+1)*i
,其中i为自然数,即n%(m+1)=0
,面对这种情况无论我怎么取,对方总可以将其恢复为n%(m+1)=0
,一直到n=(m+1)
局势。
玩家的策略:
就是把当前面对的非奇异局势变为奇异局势留给对方。如果当前的石子个数为
(m+1)*i+s
,那么就将s个石子取走,使其达到奇异局势。
回到原题如果最后抓的算负
结论,若
n%(m+1)=1
,则先手必败。即n%3==1
,则先手必败我剩1个必输
如果有4个,无论我怎么取对方都可以让我剩1个
如果有7个,无论我怎么取对方都可以让我剩4个
如果16个的话,先手必败
# 红墨水蓝墨水
一瓶红墨水50克,一瓶蓝墨水50克,从红墨水中取一克红墨水放入蓝墨水中,然后又从蓝墨水瓶中取出一克混合墨水送还到红墨水瓶中,请问现在是红墨水瓶的蓝墨水多还是蓝墨水瓶中的红墨水多?一样多
第一次取,此时蓝墨水瓶中的混合墨水的比例为50:1,即混合墨水的应为1/51的红墨水和50/51的蓝墨水。
1克混合墨水的应为1/51克的红墨水加50/51克的蓝墨水。
第二次取:
红墨水瓶中的蓝墨水 50/51
蓝墨水瓶中的红墨水 1 - 1/51 = 50/51
# 称重
12个球里面有一个质量不均匀,给一个天平,如果用最少比较次数找出不均匀的球。
答案:三次
# 倒水
如何用一个3升,一个5升的水杯,倒出一杯4升的水
1. 3L装满倒入5L
2. 3L继续装满倒入5L,3L里还剩1L
3. 5L水全倒出,1L倒入5L杯
4. 3L水装满倒入5L杯子
← 常考算法整理