/*
* 约瑟夫环
*
* N只猴子选大王,方法如下:按照1,2,3....n给猴子编号,
* 然后按编号顺序坐成1圈,
* 从1号猴子开始按编号顺序报数至 m ,报到 m 的猴子退出圈外,
* 退出的猴子的下一只猴子重新从1开始报数至m,报到m的猴子退出,
* 如此循环直至剩下一只猴子就是大王。要求编写一程序,n和m都是入参,
* 返回最后一只猴子的编号。
*/
public void King(int n, int m) {
// 总人数 M ,数到第 N 个排除。
int k = 0;
for (int i = 2; i <= n; i++){
k = (k + m) % i;
System.out.println("k=" + k);
}
System.out.println("第" + (++k) + "位当上了猴子大王。");
}k = (k + m) % i; 这段代码是怎么分析出来的???
解决方案 »
- 转行半年,现在要如何给自己更好的定位
- com.mysql.jdbc.exceptions.MySQLSyntaxErrorException
- jsp网站头像上传并编辑的方法
- 一个代码调试的问题,麻烦帮我看看
- Hql语句支持待定实体吗
- 2008-10-23发布的最新的SSH2实战源码及配套视频下载
- 自动刷新显示当前在线人数
- 多线程问题
- eXtremeComponents 报表编译问题,我的安装没问题,有时候调用就出编译错误,有时候好用,大家帮忙,谢谢啊
- 多客户端版软件中 当多个客户端同时开户时,怎样避免生成的用户编号重复
- eclipse jboss shutdown
- 为什么会提示oracle方言不支持sequence
n==1时,k1==0
n==2时,k2==m%2
n==3时,k3==(k2 + m%3)%3==(k2 + m)%3,这是因为m%3的那位被请走,从k3到k2的序号值需要用m%3调整差异,因为调整后值可能突破3所以再%3
最终确立前述程序中的
k''=(k' + m) % n这也反映了运行效率高的算法可读性往往差。这个题用链表做,哪个都能看懂。