报数游戏(2)--【英雄会】
新年快乐!送上蛇年的最后一篇博客,迎接马年...
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)--【英雄会】相关推荐
- 报数游戏(3)--【英雄会】
回来也十天了,中间各种私事,包括替看店等等...不过现在终于有着较大段时间逛逛英雄会了,最近题目出了数道,当然难度也是比较适合的,二星.三星的我还勉强可以一做...废话不多言,说题目吧: 一种报数游戏 ...
- 英雄会-----报数游戏(3)
报数游戏(3) 题目: 一种报数游戏是从1开始连续报数,如果报到7的倍数(7,14,21,28--) 或者包含数字7的数(7,17,27,37--)就用拍手代替这个数而不能报出. 假设 ...
- NYOJ 559 报数游戏
报数游戏 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 n 个人站成一行玩一个报数游戏.所有人从左到右编号为 1 到 n.游戏开始时,最左边的人报 1,他右边的人报 2 ...
- zcmu-1643 报数游戏
B - 报数游戏 n个人站成一行玩一个报数游戏.所有人从左到右编号为1到n.游戏开始时,最左边的人报1,他右边的人报2,编号为3的人报3,等等.当编号为n的人(即最右边的人)报完n之后,轮到他左边的人 ...
- toj 4316 报数游戏
toj 4316 报数游戏 时间限制(普通/Java):1000MS/3000MS 内存限制:65536KByte 总提交: 68 测试通过:35 描述 n 个人站成一行玩一个报数游戏.所有人从左到右 ...
- 微课|中学生可以这样学Python(例5.3):报数游戏
适用教材: 董付国,应根球.<中学生可以这样学Python>.清华大学出版社,2017. 第5章 Python序列及应用 5.1.6 精彩例题分析与解答 例5.3 报数游戏 京东购买 ...
- python循环报数游戏_报数游戏python 解答
又做了个小题目,报数游戏. 题目详情: 一种报数游戏是从1开始连续报数,如果报到7的倍数(7,14,21,28--)或者包含数字7的数(7,17,27,37--)就用拍手代替这个数而不能报出.假设你连 ...
- java实现报数游戏
报数游戏 有n个孩子站成一圈,从第一个孩子开始顺时针方向报数,报到3的人出列,下一个人继续从1报数,直到最后剩下一个孩子为止.问剩下第几个孩子.下面的程序以10个孩子为例,模拟了这个过程,请完善之(提 ...
- python——报数游戏
报数游戏 模拟报数游戏.有n个人围成一圈,顺序编号,从第一个人开始从1到k(假设k=3)报数, 报到k的人退出圈子,然后圈子缩小,从下一个人继续游戏,问最后留下的是原来的第几号. 思路 代码 &quo ...
最新文章
- golang垃圾回收概述
- (原创)不带模板的DOI输出EXCEL
- 2020中国人工智能年度评选报名即将截止!4大类别7大奖项开放申请
- angula简单应用---购物篮
- 2020-11-6(JDBC)
- openlayers入门开发系列之地图属性查询篇
- SolidGraph CAD System
- 带你深入浅出的分析 HashTable 源码
- 爪哇国新游记之二十八----从url指定的地址下载文件到本地
- 25款.NET开发工具
- 数据流分析之WorkList Algorithm
- 2022年成都初级审计师考试测试题及答案
- python extension package_Python Extension Packages for Windows所有包下载
- linux下usb 驱动
- Ubuntu连接IKEv2
- 在Java中将二进制数转化成十进制数
- 互联网日报 | 4月14日 星期三 | 贾跃亭被终身禁入证券市场;天猫4月19日起降低开店门槛;小米正式迈入游戏手机细分赛道...
- 太原科技大学计算机宿舍,太原科技大学宿舍条件怎么样,有独立卫生间和空调吗...
- 在Ubuntu 18.04上安装man中文帮助手册的方法手记
- Android SystemClock类
热门文章
- Object.assign() 的用法
- JavaScript内置方法-Date对象
- 【拼多多API 开发系列】百亿补贴商品详情接口,代码封装
- 总结mybatis plus解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)方法
- python中wx是啥_设置wx.框架大小(wxPython wxWidgets)
- PayPal密码泄露漏洞(15300美金)
- 微信小程序 解决按钮点击后e.currentTarget.dataset为空的方法
- XNA游戏:横竖屏设置
- 纯数字可视对讲室内机方案
- python中stacked_python pandas dataframe for stacked=false的重叠透明区域的自定义图例?