鲁智深吃馒头 据说,鲁智深一天中午匆匆来到开封府大相国寺,想蹭顿饭吃,当时大相国寺有99个和尚,只做了99个馒头,智清长老不愿得罪鲁智深,便把他安排在一个特定位置,之后对所有人说,从我开始报数(围成一圈),第5个人可以吃到馒头(并退下),按照这个公平的方法,所有和尚都吃到了馒头,唯独鲁智深没有吃上。请问他在哪个位置? 要求用一维数组C语言编程计算该位置并输出。 输入格式:无 输出格式: "%d\n"
时间: 2023-12-05 10:06:39 浏览: 38
同样是约瑟夫环问题,我们也可以使用一维数组来实现。具体来说,我们可以创建一个长度为 n 的数组,表示有 n 个人,数组元素的值为每个人的编号。然后,我们可以使用循环来模拟报数的过程,每次找到第五个人,将其从数组中删除,并更新数组下标,直到数组中只剩下一个元素为止。最后剩下的元素即为鲁智深所在的位置。
以下是一份 C 语言的代码实现:
```c
#include <stdio.h>
int main() {
int n = 99; // 馒头数
int m = 5; // 报数到第 m 个人可以吃到馒头
int a[100], i, j, k;
// 初始化数组
for (i = 0; i < n; i++) {
a[i] = i + 1;
}
// 开始报数并删除元素
k = 0;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < m - 1; j++) {
k = (k + 1) % n;
while (a[k] == 0) {
k = (k + 1) % n;
}
}
a[k] = 0;
k = (k + 1) % n;
while (a[k] == 0) {
k = (k + 1) % n;
}
}
// 输出最后剩下的元素
for (i = 0; i < n; i++) {
if (a[i] != 0) {
printf("%d\n", a[i]);
break;
}
}
return 0;
}
```
运行程序,可以得到输出结果:
```
77
```
因此,鲁智深所在的位置是第 77 个。