约瑟夫环问题
2013-10-16 16:21
176 查看
约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
这里给出的例子中,是从编号为1的人开始报数,数到5的人出列。
这里给出的例子中,是从编号为1的人开始报数,数到5的人出列。
/*约瑟夫环问题*/ #include<stdio.h> #include<stdlib.h> typedef struct Node { int num; struct Node *next; }LinkList; //创建长度为 n 的链表 LinkList *creat(int n) { LinkList *p,*q,*head; int i=1; p=(LinkList *)malloc(sizeof(LinkList)); p->num=i; head=p; for(i=2;i<=n;i++) { q=(LinkList *)malloc(sizeof(LinkList)); q->num=i; p->next=q; p=q; /*p指向当前节点*/ } p->next=head; /*使链表尾指向链表头,形成循环链表,相当于约瑟夫环*/ return head; } void fun(LinkList *L,int m) { LinkList *p,*s,*q; p=L; printf("出列顺序为:"); while(p->next != p) { for(int i=1;i<m;i++) { q=p; p=p->next; } printf("%4d",p->num); s=p; /*暂存节点,便于释放*/ q->next=p->next; p=p->next; free(s); /*节点值输出后释放资源*/ } printf("%4d\n",p->num); /*输出最后一个节点中数值*/ } int main() { LinkList *L; int n, m; n=9; m=5; L=creat(n); fun(L,m); return 0; }
相关文章推荐
- hdu 2925 约瑟夫环问题
- 约瑟夫环问题
- n个人围成一圈,从第1个人开始数数,数到3的人出圈,输出最后剩余的人编号(约瑟夫环问题)
- 算法学习之约瑟夫环问题
- 循环链表实现Joseph环(约瑟夫环)猴子选大王类似问题
- 【100题】约瑟夫环问题。。
- 约瑟夫环和衍生问题
- 约瑟夫环问题
- 约瑟夫环问题---循环单链表
- 约瑟夫环的问题解决方法与分析
- 【c语言】使用数组解决 约瑟夫环问题
- 第一题:约瑟夫环问题
- 18 约瑟夫环问题 n个数字,每次从这个圆圈中删除第m个数字,求剩下的最后一个数字
- 播布客教学视频_C学习笔记_10.2_约瑟夫环问题(数组链表)
- 用c解决约约瑟夫环问题
- 约瑟夫环问题的数学分析解
- 第十课 循环链表,约瑟夫环问题的解决
- 约瑟夫环问题
- 约瑟夫环问题
- 动态规划解决约瑟夫环问题