鲁智深吃馒头

据说,鲁智深一天中午匆匆来到开封府大相国寺,想蹭顿饭吃,当时大相国寺有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的全部质数。

猜你喜欢

转载自blog.csdn.net/m0_74137767/article/details/130584879