阿里题目:数星星

2,有a,b两位同学,来数星星,轮流数,每次数的星星个数在[20,30],最后输完星星的孩子获胜。请问下列哪些星星数能够保证a一定获胜?

思路:此题为博弈题目,设(m,n]为当前剩余星星数,易知当a面对(0,30]则必胜,称(0,30]为必胜态。可以将(,正无穷)区间分为若干互不相交的状态,任一状态(m,n]要么为必胜态,要么为必败态;若(m,n]为必胜态,则对于(m,n]区间存在k使得按规则数k个星星,剩余星星区间(m-k,n-k]为必败态,若(m,n]为必败态,则对于(m,n]区间按规则不管数多少个星星k,剩余星星区间(m-k,n-k]为必胜态。

区间(0,30]为必胜态,则区间(30,50]不管按规则取多少个星星,都会落在区间(0,30]内,则区间(30,50]为必败态,

区间(50,80]必然存在20<=k<=30,使得按规则取k个星星后,会落在区间(30,50]这个必败态内,所以区间(50,80]为必胜态。

容易根据规律推导出区间(i*50,(i+1)*50-20]为必胜态,其中i为自然数,其他的区间为必败态。

则星星数落在必胜态区间,a必胜。

posted @ 2013-05-24 16:15  legendmaner  阅读(158)  评论(0编辑  收藏  举报