標籤:
這裡使用數組類比迴圈鏈表
#include <stdio.h>
int main()
{
int leftCount = 15; //剩餘猴子的數量
int countNum = 0; //目前數到了第幾個
int index = 0; //定義當前數組的下標從0開始。
int number = 7; //數到第七個猴子就退出
int a[15]; //一共15個猴子
int k, i;
//先初始化,讓所有的都為1
for(i = 0; i < 15; i++)
{
a[i] = 1;
}
//然後每踢出去一個就在剩下的總數裡減一,
//那麼當剩下的總數是一的時候,
//那麼就說明找到了已經找到了大王
while(leftCount != 1)
{
//當元素是1的時候就進行計數,
//當這個數量達到7的時候就說明,該把第七個踢出去了
if(a[index] == 1)
{
//如果當前剩餘猴子的數量大於1,
//然後標記還為1,那麼就在計數器中加1
countNum++;
//計數器的數和設定被踢出的猴子的數目相同的時候,
//踢出猴子,把標記改為0
if(countNum == 7){
countNum = 0; //重新整理計數器,初始化為0
a[index] = 0; //改變當前的標記為0
leftCount--; //在剩餘的猴子裡面減一
}
}
//每次判斷完一個元素,數組的下標就加一
index ++;
//當判斷到數組的末尾的時候,這裡類比迴圈鏈表,
//鏈表的尾部,接著頭部,那麼這裡數組的尾部,就接著頭部
//就把數組的最後面的元素的後一個元素的下標變為0,
//也就是又回到了第一個元素
if(index == 15){
index = 0;
}
}
//到此為止已經找到了大王,
//那麼只有元素為1的猴子才是大王。
//那麼就迴圈尋找那個是1?
for(k = 0; k < 15; k++)
{
if(a[k] == 1){
printf("%d", k + 1);
}
}
return 0;
}
C語言實現猴子選大王(約瑟夫問題)