题目: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;
转载于:https://www.cnblogs.com/hhhshct/p/6441347.html
相关资源:基于java数据结构链表写的猴子选大王