鲁智深吃馒头

  • 问题描述
    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人