題目: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;