鲁智深吃馒头

该问题是一个数学与编程结合的题目,描述了鲁智深在大相国寺中寻找吃饭位置的故事。通过模拟报数过程,找出唯一未吃到馒头的鲁智深的位置。程序使用了筛选法的思路,不断更新数组标记已出局的和尚,最终确定鲁智深的位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

据说,鲁智深一天中午匆匆来到开封府大相国寺,想蹭顿饭吃,当时大相国寺有99个和尚,只做了99个馒头
智清长老不愿得罪鲁智深,便把他安排在一个特定位置,之后对所有人说:
从我开始报数(围成一圈),第5个人可以吃到馒头(并退下)
按此方法,所有和尚都吃到了馒头,唯独鲁智深没有吃上
请问他在那个位置?
能否借鉴筛选法求出剩下的最后一个人的位置?

#include<stdio.h>

int main()
{
  int all[100]={0};//创建100人的数组,全部赋值0
  int arr[99]={0};//记录出局者
  int count = 0;//记录报数
  int c=0;//数组中非1的元素个数
  int i=0; int j=0; int k=0;
  while(c != 1)//有馒头者不只有一个人则循环
  { 
     c = 0;//每次循环重置c的值
     /*
     if(count == 5) 
     {
        count = 0; 
     } 
     感觉有些多余就注释掉了
     */
     for(i=0;i<100;i++) 
     {
       if(all[i] == 0) 
       { 
         count++; 
       }  
       if(count%5==0 && all[i] == 0) 
       { 
       all[i] = 1;//数到5的人出局赋值为1
       } 
     } 
       for(j=0;j<100;j++)
       { 
         if(all[j] == 0)
         { 
            c++;
         } 
       } 
  } 
  for(i=0;i<100;i++)
  { 
    if(all[i] == 0)
      { 
        printf("鲁智深=%d\n",i+1);
      } 
  } 
    return 0;
}

筛选法

又称筛法,具体做法是:先把N个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去。这样一直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的全部质数。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值