约瑟夫斯问题j(n,2)中,如果n为11,则结果为:()
时间: 2023-09-19 16:02:17 浏览: 31
约瑟夫斯问题是一个经典的数学问题,其中n代表参与者的总人数,2代表每次报数的步长。问题的描述是:n个人从1开始循环报数,每次报到2的人出局,然后继续从下一个人开始报数,直到只剩下最后一个人为止,问最后留下来的人是第几个。
当n为11时,根据约瑟夫斯问题的规则,我们可以进行模拟计算:
首先,11个人依次编号为1、2、3、4、5、6、7、8、9、10、11。
第一轮报数,第2个人出局,剩下10个人:1、3、4、5、6、7、8、9、10、11。
第二轮报数,第4个人出局,剩下9个人:1、3、5、6、7、8、9、10、11。
第三轮报数,第6个人出局,剩下8个人:1、3、5、7、8、9、10、11。
第四轮报数,第8个人出局,剩下7个人:1、3、5、7、9、10、11。
第五轮报数,第10个人出局,剩下6个人:1、3、5、7、9、11。
第六轮报数,第1个人出局,剩下5个人:3、5、7、9、11。
第七轮报数,第3个人出局,剩下4个人:5、7、9、11。
第八轮报数,第5个人出局,剩下3个人:7、9、11。
第九轮报数,第7个人出局,剩下2个人:9、11。
第十轮报数,第9个人出局,剩下1个人:11。
所以,当n为11时,最后留下来的人是编号为11的人。
综上所述,n为11时,约瑟夫斯问题j(11,2)的结果是第11个人。
相关问题
约瑟夫斯问题c语言求出列顺序
以下是用C语言实现的约瑟夫斯问题,输出了最后剩下的人的编号。
```c
#include <stdio.h>
int main()
{
int n, m, i, s = 0;
printf("请输入总人数n和报数m:");
scanf("%d%d", &n, &m);
int a[n];
for (i = 0; i < n; i++) {
a[i] = i + 1; // 初始化人的编号
}
i = 0;
while (n > 1) {
s = (s + m - 1) % n; // 计算出要删除的人的下标
printf("%d ", a[s]); // 输出要删除的人的编号
for (i = s; i < n; i++) {
a[i] = a[i + 1]; // 删除要删除的人
}
n--; // 人数减1
}
printf("\n剩下的人的编号是:%d\n", a[0]); // 输出最后剩下的人的编号
return 0;
}
```
运行结果:
```
请输入总人数n和报数m:10 3
3 6 9 2 7 1 8 5 10
剩下的人的编号是:4
```
.约瑟夫环 【题目描述】 约瑟夫问题(有时也称为约瑟夫斯置换
)是一个经典的问题,源自于一个古老的故事。故事讲的是,约瑟夫和他的朋友们被罗马军队包围在一个洞穴里。他们决定宁愿死也不被俘虏,于是商量好了一个自杀方式,大家围成一个圈,从某个人开始,每次数到第三个人就必须自杀,直到剩下最后一个人时,那个人可以自由选择自己的命运。约瑟夫不想死,他想知道在固定的人数和数到固定的数字的情况下,他应该站在哪个位置,才能成为最后一个存活的人。请你以此为基础,模拟约瑟夫环问题。
【输入格式】
输入共一行,包含两个整数n,m,分别表示约瑟夫环的人数和数到第几个人时自杀。
【输出格式】
输出共一行,包含一个整数,表示最后存活下来的人的编号。
【数据范围】
1≤n,m≤1000
【输入样例】
5 3
【输出样例】
4
【问题分析】
模拟:
首先,我们要将所有人编号为1~n,初始化所有人都是活着的,即将一个数组alive[ ]赋初值为1
接着,我们要进行一个循环,每次循环都从1~n中找到第m个活着的人,将其杀掉,即将alive[ ]中对应的值赋为0
最后,当循环结束时,我们只需要再从1~n中找到alive[ ]中值为1的那个人,即为最后存活的人。