鲁智深吃馒头
- 问题描述
99个和尚和鲁智深,总共有99个馒头,从头开始报数,到第五人就分个馒头给他,分了馒头的人就离开,怎样分配就是让鲁智深吃不了馒头? - 问题分析:
1.每次分配馒头时先找到第一个没有分到馒头的人
2.当数数的人数为5时且当时该人没吃馒头,将数组置为1;当该人已吃馒头就到下一个,直到找到没有吃馒头的人
3.如果分馒头的人达到了99个就可以停止了
4.剩下的一人的位置就是鲁智深的位置
#include <stdio.h>
int main()
{
int mantou = 0;//记录馒头个数
int person[100] = {0};//没吃为0,吃了为1
int j = 1;//用于记录选数的个数,为5时就重置,并将该位置置为1,馒头数++,并到下一个位置x++;不为5的话就到下一个位置,x++
int x = 0;//用于记录位置
while(mantou<99){
//排除吃了馒头的人
while(person[x]!=0)
x = (x+1)%100;
if(j==5){//插入
person[x] = 1;
x = (x+1)%100;//到下一个位置
mantou ++;
j=1;//重新数数
}else{
x = (x+1)%100;//没有到5就往下数一个
j++;
}
}
for(j=0;j<100;j++){
if(person[j]==0){
printf("鲁智深的位置:%d\n",j+1);
}
}
return 0;
}
在这里需要注意的两点:
1.mantou是从0开始的,到98刚好结束,其中记录了99个馒头
2.还有就是从第五个人修改,也就是说中间相隔4人