java实现猴子选大王问题(约瑟夫问题)
题目:m只猴子围成一圈报数,报n的猴子自动离开,然后下一位重新从1开始报数,一直循环,最后剩下的那个猴子就是猴大王,写出程序求出最后是大王的那只猴子最初的位置。
package learn;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
//创建一个list集合,用来存放猴子对象(为方便推演,暂定猴子总数m为6,每次数到数n为3)
ArrayList<String> list = new ArrayList<String>();
for (int i=0 ;i<6;i++) {
list.add("monkey"+i);
}
//猴子总数,m
int total = 6;
//每次数到的目标数,n
int target = 3;
//数组下表
int index = 0;
//计数器
int count = 0;
//剩余猴子的数量,初始值等于total
int remiander = total;
//进行判断,只要剩余数量大于1,就一直执行
while(remiander>1){
/*如果数字下标等于剩余数量,说明已经遍历至数组结尾,需将数组下标重置为0
相当于猴子站成一排,到最后一只报完数后,剩下的第一只跟着继续报数,跟围城一圈效果一样*/
if(index==remiander){
index=0;
}
//如果该下标对应有值,说明应计数一次
if( list.get(index)!= null){
//计数标志加1
count++;
//如果继续标志与目标数相等
if(count==target){
//移除对应位置的数据
list.remove(index);
//剩余数量减一
remiander--;
//将计数器重置为0
count=0;
//开始下一次循环
continue;
}
}
//每次校验完毕后,执行至此处,下标加1
index++;
}
//打印输出最后剩下的猴子信息
for (String monkey : list) {
System.out.println(monkey);
}
}
}
运行结果:m=6,n=3,结果为monkey0;
m=8, n=5,结果为monkey2;
m=10,n=4,结果为monkey4;
最新文章
- sqlite中的自增主键
- python中调用C++写的动态库
- 调用函数的ALV、面向对象的ALV设置带选择列
- hdu_5788_Level Up(树状数组+主席树)
- The method makeText(Context, CharSequence, int) in the type Toast is not applicable for the arguments (new View.OnClickListener(){}, String, int)
- PHP常见面试题总结
- 转 Caffe学习系列(2):数据层及参数
- Python内置函数(19)——oct
- C#のsocket通信
- java多线程之守护线程(Daemon)
- Kafka实战-Storm Cluster
- html 转化成 pdf
- SerialPort类的用法与示例
- mysql 索引原理及查询优化 -转载
- 56. Merge Intervals (Array; Sort)
- Linux命令学习与使用2
- 洛谷 P3235 [HNOI2014]江南乐 解题报告
- 用Qemu模拟vexpress-a9 (一) --- 搭建Linux kernel调试环境【转】
- 【眼见为实】自己动手实践理解数据库REPEATABLE READ &;&; Next-Key Lock
- bzoj1116 [POI2008]CLO 边双联通分量
热门文章
- iOS Programming Recipe 6: Creating a custom UIView using a Nib
- FileInputStream和FileOutStream的使用——文件字节输入/输出流
- iTerm2 + Oh My Zsh 打造舒适终端体验
- [原创] 改善 Firemonkey Canvas 几何绘图质量问题(移动平台)
- MVC4 Model ValueProvider
- java中介者模式
- TSQL--SORT MERGE JOIN
- Spring学习(一)&mdash;&mdash;环境准备
- 使用.net core 自带DI框架实现 延迟加载
- Windows上传文件到linux 使用winscp