猴子選大王

2022-09-24 03:18:17 字數 956 閱讀 9396

題目描述:

n個猴子圍成乙個圈

1、從第一只猴子開始報數,第一只猴子報1

2、每個報2的猴子退出,然後從下乙隻猴子重新開始報數,

3、要求輸出退出的順序和最後剩下的人

解題思路:

解法一:用陣列解決,用陣列存放1,2,3....n來表示n個猴子,然後不停的遍歷陣列,對於被選中的編號,我們可以將其標記為0,來表示該猴子已出局,然後按這種方法一直遍歷陣列,直到陣列只有乙個非0元素時,就表示已經找出最後乙個猴子。

解法二:利用環形鍊錶解決,這也是大多數人看到這個題第乙個想出的方法,畢竟操作簡單,易實現。它的具體思路就是用乙個環形鍊錶存放1,2,3....n來表示n個猴子。在利用乙個count欄位,初始值為1,統計count次數,當count = 2 時,就刪除該節點(鍊錶的刪除結點在此不在展開),在使count置1,  迴圈的結束條件就是head.next = head即剩的最後乙個元素。

public

class

chooseking

}system.out.println("最後出局者是第" +head.val);

}public

static listnode createlistnode(int

m) cur.next =head;

return

head;

}}class

listnode

}

解法三:是用遞迴來解決的,此方法只能輸出最後出局的猴子編號,所以下面會直接附上**。

/**

* *

@param

n 猴子個數

* @param

m 第m個猴子出去

* @return

*/public

static

int chooseking(int n,int

m)

猴子選大王

方法一 include int main 初始化猴子全沒出局 值為0 int count 0 排除的猴子數量 int key 0 剩下的資料索引,即最後要得到的是陣列中第幾隻猴子是大王 int i 0,index 0 i代表計數器1 7,index代表陣列下標 while count 14 當猴子數...

猴子選大王

問題描述 一群猴子,編號是1,2,3 m,這群猴子 m個 按 照1 m的順序圍坐一圈。從第1只開始數,每數到第n個,該猴子就 要離開此圈,這樣依次下來,直到圈中只剩下最後乙隻猴子,則該 猴子為大王。輸入m和n,輸出為大王的猴子是幾號。輸入描述 m個猴子和要出去的位數n。程式輸出 king是誰。inc...

猴子選大王

問題 檔名稱 專案5.cpp 作 者 秦緒龍 完成日期 2016年9月23日 版 本 號 v1.0 問題描述 一群猴子,編號是1,2,3 m,這群猴子 m個 按照1 m的順序圍坐一圈。從第1只開始數,每數到第n個,該猴子就要離開此圈,這樣依次下來,直到 圈中只剩下最後乙隻猴子,則該猴子為大王。輸入m...