酷代码 AI
菜单
服务商
DeepSeek字节豆包讯飞星火
更多选项

C语言单循环链表实现:20人约瑟夫环,报数5出局顺序全揭秘!

这是一个经典的约瑟夫环问题,可以使用链表来解决。以下是一个C语言的实现: ```c #include <stdio.h> #include <stdlib.h> typedef struct Node { int data; struct Node* next; } Node; Node* createNode(int data) { Node* newNode = (Node*)malloc(sizeof(Node)); newNode->data = data; newNode->next = NULL; return newNode; } void Josephus(int n, int m, Node* head) { Node* temp = head; while (n > 1) { for (int i = 1; i < m - 1; i++) { temp = temp->next; n--; } printf("Out: %d\n", temp->data); Node* toDelete = temp; temp = temp->next; free(toDelete); n--; } } int main() { Node* head = createNode(1); Node* temp = head; for (int i = 2; i <= 20; i++) { temp->next = createNode(i); temp = temp->next; } printf("Elimination order:\n"); Josephus(20, 5, head); return 0; } ``` 这段代码首先创建了一个包含20个节点的链表,每个节点的值代表人的编号。然后调用`Josephus`函数,按照约瑟夫环的规则淘汰人。在`Josephus`函数中,我们遍历链表,每经过m-1个人就淘汰下一个人,直到链表为空,即所有人被淘汰。 注意:这个代码假设链表的第一个节点是1号,而不是0号,因为题目中提到第一个人的编号为1。如果需要从0开始编号,只需在创建链表时从0开始即可。 ######[AI写代码神器 | 398点数解答 | 2024-07-21 11:08:32]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]