61.出圈遊戲

編程題目:

61.50個人圍成一圈數到三和三的倍數時出圈,問剩下的人是誰?在原來的位置是多少?

示例代碼:

package program.calculation.exercise61;

import java.util.ArrayList;
import java.util.List;

/**
 * 61.50個人圍成一圈數到三和三的倍數時出圈,問剩下的人是誰?在原來的位置是多少?
 * 
 * 說明:由於每次去掉元素以後,元素的個數會少一個,因此下一個3的倍數其實只需要走兩步,
 * 在爲其下標賦值的時候,需要減一,保持每次去掉的元素報數都是3的倍數。
 * 如果使用從0開始的下標開始計算,那麼初始化的時候應該使用-1(對應後來的index--),
 * 這樣就可以模擬元素已經減少一個了(令起始數字爲123,初始化爲-1,下一個去掉的數字就是3).
 * 如果下標爲0的被刪除,下標爲1的還沒有被刪除,這時候下標爲1的數字的下標自動爲0。
 */

public class CircleGame {
	public static void main(String[] args) {
		
		int num = outCycle(6, 3);
		System.out.println("該數字原來的位置是:"+num); 
		
	}

	//出圈
	private static int outCycle(int n, int m) {  
		
		int index = -1;  //定義下標,模擬已經去掉一個元素,因此從-1開始
        List<Integer> list = new ArrayList<Integer>();//創建集合對象  
        
        for (int i=1;i<=n;i++){  //添加數據元素  
        	list.add(i);    
        }
        
	    while (list.size() > 1) { //一直循環去除數據,直到只剩下一個元素 
            index = (index+m) % list.size();//得到應該出局的下標  
            list.remove(index--);  //去除元素  
        }    
        return list.get(0);//返回它的值  
    }    

}

結果顯示:

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章