鲁智深吃馒头
据说,鲁智深一天中午匆匆来到开封府大相国寺,想蹭顿饭吃,当时大相国寺有99个和尚,只做了99个馒头。智清长老不愿得罪鲁智深,便把他安排在一个特定位置,之后对所有人说: 从我开始报数(围成一圈),第5个人可以吃到馒头(并退下) ,按此方法,所有和尚都吃到了馒头,唯独鲁智深没有吃上。请问他在那个位置?
[分析]
此问题和N人报数出圈问题实为同一问题, 具体的问题算法在f函数中已作说明.
#include<stdio.h>
#include<math.h>
#define N 100 /* 参加报数的人数 */
#define T 5/* 报数最大值 */
short f(short [], short, short);
int main()
{
/* 初始N个人均没吃到馒头 */
short monks[N];
short i;
/* 问题初始化 */
/* N个数组元素代表着N个人, 数组下标对应每个人的下标 */
/* 数组元素为1表示这个人已经吃到馒头, 为0则表示没吃到馒头 */
for(i = 0; i < N; i ++)
{
monks[i] = 0;
}
printf("下标为%hd的人没吃到馒头.\n", f(monks, N, T));
}
/* 鲁智深吃馒头问题解决方案 */
short f(short m[], short n, short t)
{
short i = 0;
/* k记录当前有几个人吃到了馒头 */
short k = 0;
/* p记录当前的报数 */
short p = 1;
while(1)
{
i