报数游戏(二)

题目描述:        N个人(编号1-N),站成一排,进行报数游戏。报数过程可能进行很多轮,有如下规则: (1) 如果剩余人数不超过3个人,则游戏结束。  (2)  大家报数,然后留下报奇数的人继续游戏,或者留下报偶数的人继续游戏。 重复如此(1)(2)两步骤,到游戏结束。 问:最终剩下的三人组有多少种情况?(注意是三人组,例如如果最后剩下2个或者1个人,不计入结果中)。 输入n,
摘要由CSDN通过智能技术生成
题目描述:


        N个人(编号1-N),站成一排,进行报数游戏。报数过程可能进行很多轮,有如下规则: (1) 如果剩余人数不超过3个人,则游戏结束。  (2)  大家报数,然后留下报奇数的人继续游戏,或者留下报偶数的人继续游戏。 重复如此(1)(2)两步骤,到游戏结束。 问:最终剩下的三人组有多少种情况?(注意是三人组,例如如果最后剩下2个或者1个人,不计入结果中)。 输入n, (0<n<=10000000) 输出最终结果。                 

       分析:这道题目相对报数(一)相对容易,因为这题目不存在一个循环报数问题,所以,这个题目就变得非常容易了。但是,当我们看到题目0<n<=10000000的时候,你也许觉得这道题实现的算法的时间复杂度只可能是O(n),如果再大一点必定超时,那么什么方法才可以使得时间复杂度那么小呢?毫无疑问,肯定是找公式。经过数学归纳法之后,证明和推理过程就不说了,那我给出最后的公式吧,公式如下:

  1. 如果n为奇数,递推式为:f(n)=f(n/2)+f((n+1)/2);
  2. 如果n为偶数,递推式为:f(n)=2f(n/2);

由上面的递推式我们可以知道,假如已经给出一个数n,那么我们可以求出前n项的结果&#x

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值