Java 十五隻猴子圍成一圈選大王問題

十五個猴子圍成一圈選大王,依次1-7 循環報數,報到7 的猴子被淘汰,直到最後一隻猴子成爲大王。問,哪隻猴子最後能成爲大王。


需求:
選出一個大王。

思路:
將15只猴子封裝爲數組,用1–15表示。因爲需求是要求出一個大王,也就是說這個數組到最後只能存在一個元素,那麼就要定義循環。讓15只猴子輪流自1–7循環報數,而報數爲7的元素則要被刪除。顯然1次循環不可能達到需求,那麼就要定義一個內層循環完成報數和刪除操作,直到該數組只存在一個元素爲止。
這裏需要注意一點,報數時並非是循環結束了報數也要重新開始,而是當一個元素報數爲7時,其餘元素再重新開始報數。即使已經進入另一次循環,也要接續上個元素報的數。


步驟:
1、定義int數組arr,長度爲15,元素值爲1–15即代表了15只猴子的編號。
2、定義計數器counter 值爲0,用於報數,只要counter=7,就對該元素操作,並計數器歸0。
3、定義while循環,循環表達式爲:arr.length!=1,因爲只能有一個大王。
4、定義計數器a,值爲0,用於記錄每次循環時,對arr操作了幾次,也就是說用於記錄每一次循環有多少元素報數爲7。
5、定義for循環,循環表達式爲I"<"arr.length;只要一進入循環counter++。
6、定義if語句判斷counter是否爲7,是則arr[i]=0,計數器=0,a++。
7、for循環結束後新建一個數組newarr,長度爲arr.length-a。它是用於將arr的無效下標刪除。(0爲無效下標)。
8、定義計數器index,值爲0。它是用於newarr的下標。
9、定義for循環用於遍歷數組。,循環表達式爲i“<”arr.length。
10、使用if語句判斷arr[i]!=0,是則newarr[index++] = arr[i]。
11、for循環結束後,a=newa。

public class Test
{
    public static void main(String[]args)
    {
            //功能:定義數組並向每個下標賦值
            int[] arr = new int[15];
            for(int i=0; i<arr.length; i++)
            {
                arr[i] = i;
            }
			
			//調用example方法,並由arr接收返回值
            int[] arr = example(arr);

        //打印arr[0]的原因:因爲arr數組接收example的返回值後arr的長度爲1。
			System.out.println("大王是編號爲:"+arr[0]+” 的猴子“)
    }

    public static int[] example(int[] arr)
    {
        int counter = 0;

        while(arr.length!=1)
        {
            int a = 0;//用於記錄每一次循環時對arr操作的次數

            //功能:將報數爲7的元素變成無效元素
            for(int i=0; i<arr.length; i++)
            {
                counter++;
                if(counter==7)
                {
                    System.out.println("Test: 即將刪除"+arr[i]);
                    arr[i] = 0;
                    counter = 0;
                    a++;
                }
             }
       
            //功能:將arr中存儲無效元素的下標刪除
            int[] newarr = new int[arr.length-a];
            int index = 0;
            for(int i=0; i<arr.length; i++)
            {
                if(arr[i]!=0)
                {
                    newarr[index++] = arr[i];
                }
            }
            arr = newarr;
        }
        renturn arr;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章