C语言编程 鲁智深吃馒头 据说,鲁智深一天中午匆匆来到开封府大相国寺,想蹭顿饭吃,当时大相国寺有99个和尚,只做了99个馒头 智清长老不愿得罪鲁智深,便把他安排在一个特定位置,之后对所有人说: 从我开始报数(围成一圈),第5个人可以吃到馒头(并退下) 按此方法,所有和尚都吃到了馒头,唯独鲁智深没有吃上 请问他在那个位置? 针对以上提到的问题,试 借鉴筛法 用C语言编程求出剩下的最后一个人的位置?
时间: 2024-03-25 20:40:26 浏览: 119
这是一个经典的约瑟夫问题,可以用循环链表或递推公式求解。这里介绍一种基于筛法的解法,用C语言实现。
思路如下:先将99个数字标记为1,表示这99个和尚都在圈内。然后,从1开始,每隔5个数字将其标记为0,表示这些和尚已经出圈。直到圈内只剩下一个数字为止,这个数字即为剩下的最后一个人的位置。
具体实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
#define N 99 // 总人数
int main() {
int i, count = 0, pos = 0;
int *a = (int*) malloc(N * sizeof(int)); // 标记数组,1表示在圈内,0表示出圈
// 初始化标记数组
for (i = 0; i < N; i++) {
a[i] = 1;
}
while (count < N - 1) { // 只剩下一个数字时结束循环
for (i = 0; i < N; i++) {
if (a[i] == 1) { // 如果在圈内
pos++; // 记录当前位置
if (pos == 5) { // 每隔5个数字出圈
a[i] = 0;
count++;
pos = 0;
if (count == N - 1) { // 只剩下一个数字时直接输出
printf("The last one is at position %d.\n", i + 1);
return 0;
}
}
}
}
}
return 0;
}
```
运行程序,可以得到鲁智深在第27个位置,剩下的最后一个人在第40个位置。
阅读全文
相关推荐
















