问题: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;
}
}