hdu 1210 Eddy's 洗牌问题
2016-05-14 21:52
357 查看
[align=left]Problem Description[/align]
Eddy是个ACMer,他不仅喜欢做ACM题,而且对于纸牌也有一定的研究,他在无聊时研究发现,如果他有2N张牌,编号为1,2,3..n,n+1,..2n。这也是最初的牌的顺序。通过一次洗牌可以把牌的序列变为n+1,1,n+2,2,n+3,3,n+4,4..2n,n。那么可以证明,对于任意自然数N,都可以在经过M次洗牌后第一次重新得到初始的顺序。编程对于小于100000的自然数N,求出M的值。
[align=left]Input[/align]
每行一个整数N
[align=left]Output[/align]
输出与之对应的M
[align=left]Sample Input[/align]
20
1
[align=left]Sample Output[/align]
20
2
//选定一个位置,什么时候这个位置的数回到原来的数了,break;
//比如 选定1号位,就看经过几次变换,1号位又变成1了
Eddy是个ACMer,他不仅喜欢做ACM题,而且对于纸牌也有一定的研究,他在无聊时研究发现,如果他有2N张牌,编号为1,2,3..n,n+1,..2n。这也是最初的牌的顺序。通过一次洗牌可以把牌的序列变为n+1,1,n+2,2,n+3,3,n+4,4..2n,n。那么可以证明,对于任意自然数N,都可以在经过M次洗牌后第一次重新得到初始的顺序。编程对于小于100000的自然数N,求出M的值。
[align=left]Input[/align]
每行一个整数N
[align=left]Output[/align]
输出与之对应的M
[align=left]Sample Input[/align]
20
1
[align=left]Sample Output[/align]
20
2
//选定一个位置,什么时候这个位置的数回到原来的数了,break;
//比如 选定1号位,就看经过几次变换,1号位又变成1了
#include <iostream> using namespace std; int main() { int n,ans,i; while(cin>>n) { ans=1; i=2; while(i!=1) { if(i<=n) i=2*i; else i=(i-n)*2-1; ans++; } cout<<ans<<endl; } return 0; }
相关文章推荐
- 百度之星2016资格赛D,水题
- 第四百零七天 how can I 坚持
- [android] 手机卫士黑名单功能(ListView结合SQLite增删改)
- C++子父类成员之间相互访问的权限分析
- 关于获取imageview上的图片,保存到相册并通知相册自动更新
- PostgreSQL相关的软件,库,工具和资源集合
- java hdu2014青年歌手大奖赛_评委会打分
- SQL查询之联结查询和子查询
- Ubuntu13.10系统 apt-get update失败解决办法
- intellij配置hibernate自动生成hbm.xml文件
- objc category的秘密
- 关于string的一段代码
- Win7下的内置FTP组件的设置详解
- iOS开发——SDWebImage框架使用详解
- (二)手机游戏之萌卡篮球
- hosts文件位置、hosts文件是什么?
- 构建之法阅读笔记
- PHP TP框架
- 跟我详读ndk(第一篇)
- iOS 高效添加圆角效果实战讲解