51nod 1073 约瑟夫环(递推)
来源:互联网 发布:大学取消事业编制 知乎 编辑:程序博客网 时间:2024/05/16 08:49
N个人坐成一个圆环(编号为1 - N),从第1个人开始报数,数到K的人出列,后面的人重新从1开始报数。问最后剩下的人的编号。
例如:N = 3,K = 2。2号先出列,然后是1号,最后剩下的是3号。
Input
2个数N和K,表示N个人,数到K出列。(2 <= N, K <= 10^6)
Output
最后剩下的人的编号
Input示例
3 2
Output示例
3
先模拟一下简单数据,帮助理解。
假设n=10,k=4
开始的时候排列顺序:(0是虚构的)
0 1 2 3 4 5 6 7 8 9 10
第一次报数之后,序号4出列(4变成0号位)
0(4) 5 6 7 8 9 10 1 2 3
第二次报数之后,序号8出列(8变成0号位)
0(8) 9 10 1 2 3 5 6 7
第三次报数之后,序号2出列(2变成0号位)
0(2)3 5 6 7 9 10 1
第四次报数之后,序号7出列(7变成0号位)
0(7)9 10 1 3 5 6
第五次报数之后,序号3出列(3变成0号位)
0(3) 5 6 9 10 1
第六次报数之后,序号10出列(10变成0号位)
0(10) 1 5 6 9
第七次报数之后,序号9出列(9变成0号位)
0(9) 1 5 6
第八次报数之后,序号1出列(1变成0号位)
0(1) 5 6
第九次报数之后,序号6出列
所以可以得出最后剩下序号5。
实际上就是一个递推的过程,可以用一个变量来表示当前递推的序号数,注意外面用一个循环,每出列一个数,总数就要少一个。
代码如下:
#include<iostream>using namespace std;int main(){ int n,k; while(cin>>n>>k) { int cnt=0; for(int i=2;i<=n;i++) cnt=(cnt+k)%i; cout<<cnt+1<<endl; } return 0;}
0 0
- 51Nod 1073 约瑟夫环 (递推)
- 51nod 1073 约瑟夫环(递推)
- 51nod:1073 约瑟夫环(数学,递推)
- 51nod 1073 约瑟夫环 (数学递推)
- 约瑟夫问题 51nod 1073 约瑟夫环
- 51nod 1073 约瑟夫环 (数学)
- 1073 约瑟夫环(递推)
- 51nod 1073 约瑟夫环
- 51nod-1073约瑟夫环
- 51nod 1073 约瑟夫环
- 51nod 1073 约瑟夫环
- 51nod 1073 约瑟夫环
- 51NOD 1073 约瑟夫环
- 51Nod 1073 约瑟夫环
- 51 nod 1073 约瑟夫环
- 51Nod-1073-约瑟夫环
- 51nod 1073 约瑟夫环
- 51Nod 1073 约瑟夫环
- 49. Group Anagrams 题解
- Mybatis和Hibernate
- git知识总结
- Web移动端Css Fixed方式的布局方案
- JS深入之趣味比较隐式转换(一)
- 51nod 1073 约瑟夫环(递推)
- 二叉树的后序遍历
- nyoj 20 吝啬的国度 (dfs)
- 鸟哥的Linux私房菜笔记一
- BZOJ3878 [Ahoi2014]奇怪的计算器 线段树
- Hibernate学习笔记(第三天)
- 解读Batch Normalization
- jstl 数字转换成字符串
- 覆盖技术,虚拟技术,并行技术,缓冲技术