1.
鲁智深吃馒头 据说,鲁智深一天中午匆匆来到开封府大相国寺,想蹭顿饭吃,当时大相国寺有99个和尚,只做了99个馒头,智清长老不愿得罪鲁智深,便把他安排在一个特定位置,之后对所有人说,从我开始报数(围成一圈),第5个人可以吃到馒头(并退下),按照这个公平的方法,所有和尚都吃到了馒头,唯独鲁智深没有吃上。请问他在哪个位置? 要求编程计算该位置并输出。 输入格式:无 输出格式: "%d\n"
#include <stdio.h>
#define MAXN 99 // 馒头总数
#define MAXP 100 // 总人数
#define MAXH 5 // 最大报数人数
int main (void)
{
int cnt = 1; // 用于统计报数
int p[MAXP] = {0}; // 初始化和尚, 每人0馒头
int i = MAXN, j = 0;
while (i != 0)
{
while (p[j] != 0) // 模拟退出
{
j = (j + 1) % MAXP; // 指向下一个人
}
if (cnt == MAXH)
{
p[j] = 1;
j = (j + 1) % MAXP; // 指向下一个人
i --; // 分配一人,馒头 - 1
cnt = 1; // 重新计数
}
else
{
cnt ++;
j = (j + 1) % MAXP; // 指向下一个人
}
}
int k;
for (k = 0; k < MAXP; k ++) // 遍历寻找
{
if (p[k] == 0)
{
printf ("%d\n", k + 1);
break;
}
}
return 0;
}