输赢问题

来源:互联网 发布:js图片下拉放大效果 编辑:程序博客网 时间:2024/05/01 00:37

此类题目的原型为:两个人比赛,从某一个数(Ns)开始,每次最间隔(1~n)个数,谁先到某一个指定数(Ne), 谁就输(或者赢)!

 

比如乒乓球问题:假设排列着100个乒乓球,由两个人轮流拿球装入口袋,能拿到第100个乒乓球的人为胜利者。条件是:每次拿球者至少要拿1个,但最多不能超过5个,问:如果你是最先拿球的人,你该拿几个?以后怎么拿就能保证你能得到第100个乒乓球?

 

 

解析如下(分两种情况):

 

1: 谁先到(Ne)就输: 我们从后往前推,要想赢,那么必须 Ne-1 的这个数是你的;因为然后对手间隔数的范围为(1~n), 所以继续往前推,你应该说的数为:(Ne - 1 - (1+n));依此类推,你要说的每一个数必须满足如下通式:

 

Ne - 1 - (1+n)*t  (t:为自然数)

 

那么你要说的第一个数就是: (Ne-1) mod (1+n).

 

2:谁先到(Ne)就赢: 我们从后往前推,要想赢, 同理,那么Ne - (1+n)这个数你必须说,同理应该满足如下的通式:

 

   Ne - (1+n)*t  (t:为自然数)

 

那么你要说的第一个数就是: (Ne) mod (1+n).

 

       因此,对于乒乓球的问题,属于第二种问题: 带入通式计算得到:只有第一个人先拿100 mod (1+5) = 4 个乒乓球,而且后面只要他不疏忽,每次拿球的数量必须满足: 本次拿球的数量 + 口袋中已有的数量 = 上次他拿完球后口袋中剩余的球的数量 + 6 (1+n)。这样他必然能赢。 

 

 

原创粉丝点击