問題及代碼:
問題描述: 一羣猴子,編號是1,2,3 …m,這羣猴子(m個)按照1-m的順序圍
坐一圈。從第1只開始數,每數到第n個,該猴子就要離開此圈,這樣依次下來,最後一隻出圈的猴子爲大王。輸入m和n,輸出猴子離開圈子的順序,從中也可以看出最後爲大王是幾號猴子。要求採用數組作爲存儲結構完成。
輸入描述:猴子的個數與出隊的序號。
程序輸出:出隊順序。
#include <stdio.h>
#define MaxSize 8
void king(int m,int n)//m猴子的數量,n是出列的數。
{
int mon[MaxSize];
int i=0,j=0,t=-1;
while(i<m)
{
mon[i]=1;
i++;
}
i=0;
while(i<m)
{
while(j<n)
{
t=(t+1)%m;
if(mon[t]==1)
j++;
}
mon[t]=0;
printf("%d ",t+1);
i++;
j=0;
}
}
int main()
{
int m,n;
printf("請輸入猴子的個數及出列的序號。");
scanf("%d %d", &m, &n);
king(m,n);
return 0;
}
運行結果:
知識點總結:
約瑟夫問題的數組解法。