問題:99個人,99個饅頭,來了一個魯智深,找個位置把他放進去,然後每逢五的人,喫一個饅頭,並且退場,最後讓他無法喫。
在講解數組應用等問題中,爲學生展示該問題的求解方法。
問題抽象:
99個饅頭,每次分一個
計數器:1-5
指針:0-99(循環)
當前數組元素值0或者1(數組初始值爲0,當改變成1時,表明i號元素的和尚分到饅頭)
代碼如下:
int i=0;//饅頭個數
int j=0;//指針
int k=1;//計數器
int a[100]={0};
while(i<99)
{
while(a[j]!=0)//分每個饅頭開始,先找到第一個沒分到饅頭的人
j=(j+1)%100;
if(k==5) //遇到第5人的操作:置數組爲1,饅頭++,指針向下指j++,重新計數k=1
{
a[j]=1;
printf("The %d th people gets the %d th man tou.\n",j,i);
i++;
j=(j+1)%100;
k=1;
} //非第5人的情況
else
{
k++;
j=(j+1)%100;
}
}