约瑟夫问题 链表解
2012-02-10 17:05
155 查看
题目描述
n个人想玩残酷的死亡游戏,游戏规则如下:n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,活到最后的一个人是胜利者。
请输出最后一个人的编号。
输入
输入n和m值。输出
输出胜利者的编号。示例输入
5 3
示例输出
4
提示
第一轮:3被杀第二轮:1被杀第三轮:5被杀第四轮:2被杀#include<iostream.h> #include<malloc.h> struct mon { int num; struct mon *next; }; struct mon *creat(int n) { int i; struct mon *head,*p,*tail; p = (struct mon *)malloc(sizeof(struct mon)); p->num = 1; p->next = NULL; head = p; tail = p; for(i = 2 ; i <= n ;i++) { p = (struct mon *)malloc(sizeof(struct mon)); p->num = i; tail->next = p; tail = p; p->next = NULL; } tail->next = head; return head; } int sel(struct mon *head,int m, int n) { int count = 0,i = 0; struct mon *p,*q; q = head; while(q->next!=head) { q = q->next; } while(count<n-1) { p = q->next ; i++; if(i%m == 0) { q->next = p->next; free(p); count++; } else q = p; } return q->num; } int main() { int n,m; struct mon *head; cin>>n>>m; head = creat(n); cout<<sel(head,m,n)<<endl; return 0 ; }
相关文章推荐
- C++ HOJ 约瑟夫问题 的 数组、链表及STL实现
- 韩顺平_PHP程序员玩转算法公开课(第一季)05_使用单链表解决约瑟夫问题_学习笔记_源代码图解_PPT文档整理
- 用单循环链表实现约瑟夫问题。
- 17.环形链表,以及用环形链表解决约瑟夫问题
- SDUT OJ 约瑟夫问题——链表
- 约瑟夫问题(链表经典)
- 约瑟夫问题——链表实现
- 数据结构学习笔记(二) 链表之用循环链表解决约瑟夫问题
- 约瑟夫问题3——出列序列(链表)
- 约瑟夫问题(单链表)
- 用链表实现约瑟夫问题(c/C++)
- C语言单向循环链表解决约瑟夫问题
- 小孩报数-约瑟夫问题数组链表
- 【练习】双向链表应用于约瑟夫问题
- 循环链表解决约瑟夫问题
- C语言通过双向循环链表解决Josephus(约瑟夫)问题
- 约瑟夫(Josephus)问题的求解——利用循环链表
- 链表问题---环形单链表的约瑟夫问题
- 数据结构与算法(单循环链表_约瑟夫问题)
- 3.2数据结构之指针和链表 1748:约瑟夫问题