抓石子问题——不用递归写斐波那契函数来解决

8.7通过华为机试平台进行模拟测试,遇到了抓石子的问题,思考到半夜两点,稍有思路,认为还算正确,今天把程序写完提交,不知为何8个测试用例有1个未通过,上网查了下这个问题,普遍提示是斐波那契博弈,写斐波那契函数就可以解决问题,猛觉自己的做法较为死板,但是也不认为自己做错了,因此在这写下思路和解法,希望可以有人看到,发现其中的问题。

题目:

将自己带入首先拿石子的角色,考虑面对n颗石子自己的输赢情况,首先自己可以拿的石子数量小于等于(n-1)/3,否则会输,而且如果上一次拿的石子的数量为(n+1)/2,那么我方肯定赢。

n  

(n-1)/3

能不能一定赢

肯定输的条件

备注

3

0

N

对方上一次拿的石子数量小于2或者是游戏开始第一次抓石子

只能拿1或者2颗,对方都可以把石子拿完

4

1

Y

 

拿1颗石子,对方就满足了石子数量等于3的时候的输的条件,我方赢

5

1

N

前一次拿的石子的数量小于3

拿1颗石子的,剩下4颗石子,对方进入必赢状态,拿2颗石子,剩下3颗石子,对方不满足肯定输的条件,对方赢

6

1

Y

 

拿1颗石子,则剩下5颗,对方满足肯定输的条件,自己赢

7

2

Y

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值