題目描述:
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即剩的最後乙個元素。
publicclass
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...