新年快乐!送上蛇年的最后一篇博客,迎接马年...

N个人(编号1-N),站成一排,进行报数游戏。报数过程可能进行很多轮,有如下规则:

(1) 如果剩余人数不超过3个人,则游戏结束。 

(2)  大家报数,然后留下报奇数的人从第一个人继续游戏,或者留下报偶数的人继续游戏。

重复如此(1)(2)两步骤,到游戏结束。

问:最终剩下的三人组有多少种情况?(注意是三人组,例如如果最后剩下2个或者1个人,不计入结果中)。

输入n, (0<n<=10000000) ,输出最终结果。

闲暇时间来刷刷题,这是昨天看到的,感觉这题还不错,能力范围之内,规则很简单,

(1) 如果剩余人数不超过3个人,则游戏结束。

(2) 大家报数,然后留下报奇数的人从第一个人继续游戏,或者留下报偶数的人继续游戏。

若是三个人则统计加1,一个人,两个人则不计入。例如5,奇数为1,3,5计入,2,4不够则不计;

了解到题意后,即可进行操作了,输入n;

若n是偶数,则报数结束之后有n/2是报出奇数的,有n/2是报出偶数的,进行判断,继续进行报数;

若n是奇数,则报数结束之后有n/2 + 1是报出奇数的,有n/2是报出偶数的,进行判断,继续进行报数;

得出递归:

int howmany (int n)
{static int count;if(n == 3)  //三人组count++;else if(n > 3)  //{if(n % 2 == 0)  //当人数为偶数{howmany(n/2);  //取奇偶数howmany(n/2);  //}else  //奇数{howmany(n/2+1);  //取奇howmany(n/2);  //偶}}else ;return count;
}

刚开始还担心递归内存可能会出现问题,但是把10000000都测试了,没问题;

满心欢喜的交上去...结果很尴尬啊,连4这个测试点都未过;

可是算来算去4这个测试点都不会出现问题啊,带着这个遗憾过了昨晚,今天再次提交了一遍,依然不对...

跑到交流群里面质疑去了,感谢@绿色夹克衫的倾情提醒,"缓存的问题..."

以前从未考虑过这个问题,认为hero的测试点是一个一个的将数据代入的,即每运行一次程序代入一个数据,发现是个误区,main里面应该是个while循环,一次运行程序,不断测试数据

所以,将递归修改了:

#include<stdio.h>
#include<stdlib.h>int howmany (int n)
{int *dp = (int *)malloc(( n + 1 ) * sizeof(int));int i;dp[1] = 0;  //一个人dp[2] = 0;  //两个人dp[3] = 1;  //三个人for(i = 4; i <= n; i++){if (i % 2 == 0)  //偶数个{dp[i] = dp[i / 2] + dp[i / 2];  //奇偶}else  //奇{dp[i] = dp[i / 2 + 1] + dp[i / 2];  //}}return dp[n];
}
//start 提示:自动阅卷起始唯一标识,请勿删除或增加。
int main()
{    printf("%d",howmany(8));
}
//end //提示:自动阅卷结束唯一标识,请勿删除或增加。   

非递归的程序,没用静态变量或是全局变量,不存在数据的缓存的问题,so,通过了

新年快乐!

(*∩_∩*)

报数游戏(2)--【英雄会】相关推荐

  1. 报数游戏(3)--【英雄会】

    回来也十天了,中间各种私事,包括替看店等等...不过现在终于有着较大段时间逛逛英雄会了,最近题目出了数道,当然难度也是比较适合的,二星.三星的我还勉强可以一做...废话不多言,说题目吧: 一种报数游戏 ...

  2. 英雄会-----报数游戏(3)

    报数游戏(3) 题目:         一种报数游戏是从1开始连续报数,如果报到7的倍数(7,14,21,28--) 或者包含数字7的数(7,17,27,37--)就用拍手代替这个数而不能报出. 假设 ...

  3. NYOJ 559 报数游戏

    报数游戏 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 n 个人站成一行玩一个报数游戏.所有人从左到右编号为 1 到 n.游戏开始时,最左边的人报 1,他右边的人报 2 ...

  4. zcmu-1643 报数游戏

    B - 报数游戏 n个人站成一行玩一个报数游戏.所有人从左到右编号为1到n.游戏开始时,最左边的人报1,他右边的人报2,编号为3的人报3,等等.当编号为n的人(即最右边的人)报完n之后,轮到他左边的人 ...

  5. toj 4316 报数游戏

    toj 4316 报数游戏 时间限制(普通/Java):1000MS/3000MS 内存限制:65536KByte 总提交: 68 测试通过:35 描述 n 个人站成一行玩一个报数游戏.所有人从左到右 ...

  6. 微课|中学生可以这样学Python(例5.3):报数游戏

    适用教材: 董付国,应根球.<中学生可以这样学Python>.清华大学出版社,2017. 第5章  Python序列及应用 5.1.6  精彩例题分析与解答 例5.3  报数游戏 京东购买 ...

  7. python循环报数游戏_报数游戏python 解答

    又做了个小题目,报数游戏. 题目详情: 一种报数游戏是从1开始连续报数,如果报到7的倍数(7,14,21,28--)或者包含数字7的数(7,17,27,37--)就用拍手代替这个数而不能报出.假设你连 ...

  8. java实现报数游戏

    报数游戏 有n个孩子站成一圈,从第一个孩子开始顺时针方向报数,报到3的人出列,下一个人继续从1报数,直到最后剩下一个孩子为止.问剩下第几个孩子.下面的程序以10个孩子为例,模拟了这个过程,请完善之(提 ...

  9. python——报数游戏

    报数游戏 模拟报数游戏.有n个人围成一圈,顺序编号,从第一个人开始从1到k(假设k=3)报数, 报到k的人退出圈子,然后圈子缩小,从下一个人继续游戏,问最后留下的是原来的第几号. 思路 代码 &quo ...

最新文章

  1. golang垃圾回收概述
  2. (原创)不带模板的DOI输出EXCEL
  3. 2020中国人工智能年度评选报名即将截止!4大类别7大奖项开放申请
  4. angula简单应用---购物篮
  5. 2020-11-6(JDBC)
  6. openlayers入门开发系列之地图属性查询篇
  7. SolidGraph CAD System
  8. 带你深入浅出的分析 HashTable 源码
  9. 爪哇国新游记之二十八----从url指定的地址下载文件到本地
  10. 25款.NET开发工具
  11. 数据流分析之WorkList Algorithm
  12. 2022年成都初级审计师考试测试题及答案
  13. python extension package_Python Extension Packages for Windows所有包下载
  14. linux下usb 驱动
  15. Ubuntu连接IKEv2
  16. 在Java中将二进制数转化成十进制数
  17. 互联网日报 | 4月14日 星期三 | 贾跃亭被终身禁入证券市场;天猫4月19日起降低开店门槛;小米正式迈入游戏手机细分赛道...
  18. 太原科技大学计算机宿舍,太原科技大学宿舍条件怎么样,有独立卫生间和空调吗...
  19. 在Ubuntu 18.04上安装man中文帮助手册的方法手记
  20. Android SystemClock类

热门文章

  1. Object.assign() 的用法
  2. JavaScript内置方法-Date对象
  3. 【拼多多API 开发系列】百亿补贴商品详情接口,代码封装
  4. 总结mybatis plus解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)方法
  5. python中wx是啥_设置wx.框架大小(wxPython wxWidgets)
  6. PayPal密码泄露漏洞(15300美金)
  7. 微信小程序 解决按钮点击后e.currentTarget.dataset为空的方法
  8. XNA游戏:横竖屏设置
  9. 纯数字可视对讲室内机方案
  10. python中stacked_python pandas dataframe for stacked=false的重叠透明区域的自定义图例?