博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA 1394 And Then There Was One 约瑟夫环数学方法
阅读量:6358 次
发布时间:2019-06-23

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

题意:

n个人围成环,首先第m个人出列,然后从下一个开始,数到第k个就出列。。。问最后剩下的是谁?

为了方便,我们采用0~n-1的编号方式

先考虑当题意没有m的时候,就是说从第一个人开始,第k个人出列。

那么第一个出列的就是编号k-1的人,此时我们把剩下的人重新编号

k->0

k+1->1

k+2->2

........

k-2->n-2

假设新编号为x的人是最终剩下来的,那他在原来的编号是多少?

就是(x+k)%n

所以我们只要一直重复这个过程便能求得最开始那个人的编号,因为这个人最终的编号是0(只剩他一个人)

0->(0+k)%2->((0+k)%2+k)%3->......

回到这道题,多了个条件“首先第m个人出列”

同样的也就是编号(m-1)的人先出列,然后重新编号

m->0

m+1->1

....

m-2->n-2

所以只有递推的最后一步m变成k而已

int main(){    int n,k,m;    while(scanf("%d%d%d",&n,&k,&m)!=EOF&&(m||n||k))    {        int x=0;        for(int i=2;i
View Code

 

转载于:https://www.cnblogs.com/BMan/p/3249094.html

你可能感兴趣的文章
简单的初步认识Java这门编程语言
查看>>
SQLServer数据库如何收缩日志空间?
查看>>
深入理解SQL Server 2005 中的 COLUMNS_UPDATED函数
查看>>
Exchange邮箱登陆界面添加验证码功能完美解决方案
查看>>
Linux网络服务_主从DNS配置示例_Redhat Enterprise 5.9
查看>>
java通过Stream对list集合分组
查看>>
中国第一望世家族唐朝宰相裴度后裔在松滋
查看>>
组策略之IE安全设置
查看>>
导出SQL2000数据库文件
查看>>
rapid-pvst向mstp迁移
查看>>
RHEL6U3安装64bit Oracle 11gR2
查看>>
MySQL系列第二篇:MySQL可视化工具Navicat for MySQL安装配置和使用
查看>>
QStandardItemModel角色控制及QTreeView添加不同的右键菜单
查看>>
cloudflare ppt
查看>>
一例所有文件都打不开的数据恢复过程
查看>>
Oracle渗透,记录一下
查看>>
像看电影一样学OSPF
查看>>
说说加密与解密这对冤家 一
查看>>
安装 Hyper-V Server 2012 R2
查看>>
设定Windows计划任务定期执行PowerShell脚本
查看>>