鲁智深吃馒头

据说,鲁智深一天中午匆匆来到开封府大相国寺,想蹭顿饭吃,当时大相国寺有99个和尚,只做了99个馒头。智清长老不愿得罪鲁智深,便把他安排在一个特定位置,之后对所有人说: 从我开始报数(围成一圈),第5个人可以吃到馒头(并退下) ,按此方法,所有和尚都吃到了馒头,唯独鲁智深没有吃上。请问他在那个位置? 能否借鉴筛法求出剩下的最后一个人的位置?
#include <stdio.h>
#include <stdlib.h>
#define N 100
int counter=0;//最重要的是把没有数到5的个数打个记号,作为全局变量。就可以重新循环时候可以从打记号处开始。
void luzhishen(int a[],int n)
{
    int i,j;
    for(i=0; i<=n-1; i++)
    {
        if(a[i]!=0)
        {
            counter++;
        }
        if(counter%5==0)
        {
            a[i]=0;
        }
        if(counter==495)
        {
            for(i=0; i<n-1; i++)
            {
                if(a[i]!=0)
                {
                    printf("a[%d]\n",i+1);
                    return;
                }
            }
        }
    }
    luzhishen(a,n);
}
int main()
{
    int a[N],n=100,i;
    for(i=0; i<=n-1; i++)
    {
        a[i]=1;
    }
    luzhishen(a,100);
    return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int a[100];
    int i,counter=0,j,count=1;
    for(i=0; i<100; i++)
    {
        a[i]=1;
    }
    for(i=0; count<=99; i++)
    {
        counter += a[i%100];
        if(counter==5)
        {
            a[i%100]=0;
            counter=0;
            count++;
        }
    }
    for(i=0; i<100; i++)
    {
        if(a[i])
            printf("%d\n",i+1);
    }
    return (0);
}

<pre class="cpp" name="code">#include <stdio.h>
#include <stdlib.h>
#define N  100
int main()
{
    int i=0;
    int a[N];
    for (i=0;i<100;i++)
    {
        a[i]=1;
    }
    int m =99;
    int cnt=0;
   // int u=0;
    do
    {
         int p=0;
         for (p=0;p<N;p++)
        {
            if(a[p]!=0)
            {
                cnt ++;
                if(cnt ==5)
                {
                    cnt =0;
                    m--;
                    a[p]=0;
                }
            }
        }
    }while (m!=0);
    for(i=0;i<N;i++)
    {
        if(a[i]!=0)
        {
            printf("%d",i);
        }
    }
    return 0;
}

 
</pre><pre class="cpp" name="code">
 

  • 9
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值