*煙臺大學計控學院
*作 者:鄒曉琳
*完成日期:2015年10月23日
*問題描述:一羣猴子,編號是1,2,3 …m,這羣猴子(m個)按照1-m的順序圍坐一圈。從第1只開始數,每數到第n個,該猴子就要離開此圈,這樣依次下來,最後一隻出圈的猴子爲大王。輸入m和n,輸出猴子離開圈子的順序,從中也可以看出最後爲大王是幾號猴子。
要求採用數組作爲存儲結構完成。
*/
#include <stdio.h>
#define MaxSize 8
void king(int m,int n)
{
int p[MaxSize];
int i,j,t;
for(i=0;i<m;i++)
p[i]=1;
t=-1;
printf("出列順序:");
for(i=1;i<=m;i++)
{
j=1;
while(j<=n)
{
t=(t+1)%m;
if(p[t]==1)
j++;
}
p[t]=0;
printf("%d ",t+1);
}
printf("\n");
}
int main()
{
int m,n;
scanf("%d %d", &m, &n);
king(m,n);
return 0;
}
運行結果:
知識點總結:
在一個數組中,數組中用1表示猴子在圈中,用0表示猴子已經出圈,數組下標對應與猴子編號對應(例如數組元素p[0]值爲1,表示第1只猴子尚在圈中,即p[i]代表編號爲i+1的猴子是否在圈中)。 一隻猴子出圈,則將對應的數組值置爲0;在報數過程中,要跨過值爲0的猴子。數到最後一隻猴子時需要折回到下標爲0的位置,猴子出圈後,還將對應元素的值置爲0。
學習心得:
一開始不明白意思,多敲幾遍就懂了。