博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
约瑟夫问题
阅读量:7072 次
发布时间:2019-06-28

本文共 1505 字,大约阅读时间需要 5 分钟。

#1296 : 数论三·约瑟夫问题

时间限制:
10000ms
单点时限:
1000ms
内存限制:
256MB

描述

小Hi和小Ho的班级正在进行班长的选举,他们决定通过一种特殊的方式来选择班长。

首先N个候选人围成一个圈,依次编号为0..N-1。然后随机抽选一个数K,并0号候选人开始按从1到K的顺序依次报数,N-1号候选人报数之后,又再次从0开始。当有人报到K时,这个人被淘汰,从圈里出去。下一个人从1开始重新报数。

也就是说每报K个数字,都会淘汰一人。这样经过N-1轮报数之后,圈内就只剩下1个人了,这个人就作为新的班长。

举个例子,假如有5个候选人,K=3:

初始0: 0 1 2 3 4从0号开始报数,第1次是2号报到31: 0 1 - 3 4    	// 0 1 2, 2号候选人淘汰从3号开始报数,第2次是0号报到32: - 1 3 4		// 3 4 0, 0号候选人淘汰从1号开始报数,第3次是4号报到33: 1 3 -		// 1 3 4, 4号候选人淘汰从1号开始报数,第4次是1号报到34: - 3			// 1 3 1, 1号候选人淘汰

对于N=5,K=3的情况,最后当选班长的人是编号为3的候选人。

小Ho:小Hi,我觉得当人数和K都确定的时候已经可以确定结果了。

小Hi:嗯,没错。

小Ho:我也想当班长,小Hi你能提前告诉我应该站在哪个位置么?

小Hi:我可以告诉你怎么去求最后一个被淘汰的位置,不过具体的值你得自己去求解。

小Ho:嗯,没问题,那么你快告诉我方法吧!

 

输入

第1行:1个正整数t,表示多组输入数据,1≤t≤100

第2..t+1行:每行2个正整数n,k,第i+1行表示第i组测试数据,2≤n≤1,000,000,000。2≤k≤1,000

输出

第1..t行:每行1个整数,第i行表示第i组数据的解

样例输入
25 38 3
样例输出
36
1 #define ll long long 2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 #include
12 #include
13 #include
14 using namespace std;15 int gi() {16 int res=0,f=1;17 char ch=getchar();18 while((ch<'0'||ch>'9')&&ch!='-') ch=getchar();19 if(ch=='-') ch=getchar(),f=-1;20 while(ch>='0'&&ch<='9') res=res*10+ch-'0',ch=getchar();21 return res*f;22 }23 int Joseophus(int n,int k) {24 if(n==1) return 0;25 if(n

 

转载于:https://www.cnblogs.com/ypz999/p/6639057.html

你可能感兴趣的文章
大型系统中使用JMS优化技巧–Sun OpenMQ
查看>>
思达报表工具Style Report基础教程—用选择树进行图表的钻取
查看>>
JQuery empty selector
查看>>
Direct vs non-direct ByteBuffer
查看>>
SQLSERVER——Log Explorer 数据恢复
查看>>
oracle job最简单创建代码
查看>>
常识 跳转读取js函数
查看>>
Linux内核中的jiffies及其作用介绍及jiffies等相关函数详解
查看>>
Unity3D 事件处理函数
查看>>
unix编程高级io之epool
查看>>
linux系统硬件配置查看方法
查看>>
[转]PHP函数的实现原理及性能分析
查看>>
格式化数字
查看>>
linux 硬链接 软连接
查看>>
Redis配置详解-客户端缓冲区 output buffer
查看>>
Linux命令操作
查看>>
flutter 视频播放 VideoPlayController
查看>>
SQOOP导入mysql数据库乱码
查看>>
Hibernate_持久类的要求
查看>>
actor-sdk打包成javascript脚本文件
查看>>