用循环列表写约瑟夫环问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀的顺序是:5,4,6,2,3,1。
时间: 2023-05-13 14:06:16 浏览: 83
以下是用循环列表写约瑟夫环问题的代码:
```python
def josephus(n, m):
# 创建循环列表
circle = [i for i in range(1, n+1)]
# 当列表中还有多于一个元素时,继续循环
while len(circle) > 1:
# 找到第m个元素的索引
index = (m-1) % len(circle)
# 删除该元素
circle.pop(index)
# 将列表向左移动m-1个位置
circle = circle[index:] + circle[:index]
# 返回最后剩下的元素
return circle[0]
# 测试
print(josephus(6, 5)) # 输出1
```
关于中文加密的问题,我需要更多的信息才能回答。请问您是想了解中文加密的哪个方面?例如,是想了解中文加密算法的实现方式,还是想了解如何使用中文加密保护敏感信息?
相关问题
用C语言数据结构的循环列表写约瑟夫环问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀的顺序是:5,4,6,2,3,1。
以下是用C语言数据结构的循环列表写约瑟夫环问题的代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node *next;
} Node;
Node *createList(int n) {
Node *head = NULL, *p = NULL, *q = NULL;
int i;
for (i = 1; i <= n; i++) {
p = (Node *)malloc(sizeof(Node));
p->data = i;
if (head == NULL) {
head = p;
} else {
q->next = p;
}
q = p;
}
q->next = head;
return head;
}
void josephus(int n, int m) {
Node *head = createList(n);
Node *p = head, *q = NULL;
int i;
for (i = 1; i < m; i++) {
q = p;
p = p->next;
}
while (p->next != p) {
q->next = p->next;
free(p);
p = q->next;
for (i = 1; i < m; i++) {
q = p;
p = p->next;
}
}
printf("%d\n", p->data);
free(p);
}
int main() {
int n = 6, m = 5;
josephus(n, m);
return 0;
}
关于中文加密的问题,我不太清楚你具体想问什么,可以再提供一些细节吗?
【程序片段题】约瑟夫问题(循环链表实现) 【问题描述】 约瑟夫环问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀的顺序是:5,4,6,2,3,1。 【输入形式】 输入两个正整数N和M,N表示N个人,M表示报数到M; 【输出形式】 输出依次出列的序号。以空格作为分隔。用c语言循环列表
的方式实现。
【样例输入】
6 5
【样例输出】
5 4 6 2 3 1
【样例说明】
6个人围成一圈,从第一个开始报数,每次报数到第5个人将被杀掉,最后剩下一个人,其余人都将被杀掉。被杀的顺序依次是:5,4,6,2,3,1。
阅读全文