鲁智深吃馒头

来源:互联网 发布:老梁故事汇 知乎 编辑:程序博客网 时间:2024/04/28 00:21
据说,鲁智深一天中午匆匆来到开封府大相国寺,想蹭顿饭吃,当时大相国寺有99个和尚,只做了99个馒头。智清长老不愿得罪鲁智深,便把他安排在一个特定位置,之后对所有人说: 从我开始报数(围成一圈),第5个人可以吃到馒头(并退下) ,按此方法,所有和尚都吃到了馒头,唯独鲁智深没有吃上。请问他在那个位置? 能否借鉴筛法求出剩下的最后一个人的位置?
#include <stdio.h>#include <stdlib.h>#define N 100int 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  100int 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">

0 0
原创粉丝点击