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