用循环链表解决报数淘汰问题
来源:互联网 发布:Windows命令删除文件夹 编辑:程序博客网 时间:2024/06/06 01:21
问题:
100人围成一个圈,每人有一个编码,编码从1到100。他们开始从1开始依次报数,报到M的人自动退出圈圈,然后下一个人接着从1开始报数,直到剩余的人小于M。输出剩下的人原先的号码,M=3时为:58,91,M=4时为34,45,97.
分析:建立一个循环链表,删除报到数的人。其中删除子函数是将报数前一个人的指针作为形参。
程序:
#include<iostream>using namespace std;typedef struct node* prtonext;typedef prtonext position;typedef prtonext list;struct node {int element;prtonext next;};void erase(position p){position tmp;tmp = p->next;p->next = p->next->next;free(tmp);}void list_way(){list head = NULL;;list p1, p2;int m;m = 4;head = (struct node*)malloc(sizeof(struct node));head->element = 1;head->next = NULL;p2 = head;for (int i = 0; i < 99; i++){p1 = (struct node*)malloc(sizeof(struct node));p1->element = i + 2;p2->next = p1;p2 = p2->next;}p2->next = head;p1 = head;int j = m;while (j - 2){p1 = p1->next;j--;}erase(p1);for (int i = 0; i < 100 - m; i++){j = m;while (j - 1){p1 = p1->next;j--;}erase(p1);}for (int i = 0; i < m - 1; i++){cout << p1->element;p1 = p1->next;}}int main(){list_way();while (1);}
阅读全文
0 0
- 用循环链表解决报数淘汰问题
- 循环链表解决Josephus环轮流报数问题
- Java用循环链表解决约瑟夫环问题(循环报数)
- 用C++Vector和Queue解决循环报数淘汰问题
- 用链表解决淘汰出局问题(c++)
- 用循环链表解决约瑟夫问题
- 用循环链表解决约瑟夫问题
- 用单向循环链表解决约瑟夫环问题
- 用个循环链表解决约瑟夫环问题
- [转]用单向循环链表解决约瑟夫环问题
- 用循环链表解决约瑟夫(josephu)问题
- 约瑟夫环问题 (用循环链表解决)
- 用循环链表解决约瑟夫环问题
- 用循环单链表解决约瑟夫问题
- .Net用循环链表解决约瑟夫问题
- 排队(约瑟夫问题)用循环链表解决
- <C>Josephus问题——用循环链表解决
- C语言用循环链表解决约瑟夫问题
- How to skip “Loose Object” popup when running 'git gui'
- 1.1.5 memcached
- QT原子操作QAtomic API和锁QMutex
- 基本数据类型常见问题
- UVA1218[Perfect Service] 树上动态规划模型
- 用循环链表解决报数淘汰问题
- Unity内存优化方案集合
- 数据归一化(normalizing)的直观理解和通俗解释。
- HDU
- 摸索git第一天
- Jmeter二次开发环境搭建
- elad的稀疏表示名著《Sparse and Redundant Representations》的总结(一)
- 2017前端面试题总汇(含答案)
- 1.1.6 Hypertable