Josephus问题的一种解法(链表实现)
2016-10-30 15:38
417 查看
这里并不是原始的Josephus问题,而是其“通用版”,而历史上的那个只是个特殊情况
下面直接给代码:
下面直接给代码:
#include <stdio.h> #include <stdlib.h> struct People; typedef struct People *PtrToPeople; struct People { int Position; PtrToPeople Next; }; typedef PtrToPeople Curcle; typedef PtrToPeople Position; void Insert(Position P,int e) { Position TmpCell; TmpCell = malloc(sizeof(struct People)); TmpCell->Position = e; TmpCell->Next = P->Next; P->Next = TmpCell; } Position FindPre(Position P) { Position T = P; for(;;) if(T->Next == P) return T; else T = T->Next; } Position DeleteAndPrint(Position P) { printf("%d ",P->Position); Position T = FindPre(P); T->Next = P->Next; free(P); return T->Next; } /* 输出被选中的,剩下最后一个是winner */ int main() { int N,M,i; /* N表示总数,M表示跳格数 */ scanf("%d%d",&M,&N); Curcle C = malloc(sizeof(struct People)); C->Position = 1; C->Next = C; for(i = 2; i <= N; i++) { Insert(C,i); C = C->Next; } Position P = C->Next; for(;;) { int j; for(j = 0; j < M; j++) { P = P->Next; } if( P->Next == P ) { break; } else P = DeleteAndPrint(P); } return 0; }
相关文章推荐
- Josephus问题(约瑟夫问题)链表的实现
- Josephus问题的链表实现
- 约瑟夫问题(Josephus问题)的递推O(n)解法、循环解法、单循环链表解法
- 约瑟夫问题(Josephus)链表实现
- 使用链表实现Josephus环问题
- 用单链表解决约瑟夫问题 C语言实现
- 约瑟夫(Josephus)问题的实现
- 一种实现一个用户帐户不能同时登录的问题
- 猫吃老鼠问题的链表实现
- 约瑟夫环问题(Josephus)的C解法
- 单链表实现猴子选大王(约瑟夫环问题)
- 回溯算法 8皇后问题的一种解法 适合初学者观察整个回溯的过程
- 真正的创新必然是基于对市场的了解,对客户反馈的观察,开发出来的产品一定要适应市场,提出的模式一定要能解决现实的问题。而在这其中,技术只是一种实现手段。
- 从面向结构到面向对象-----josephus问题(方法三:结构化方法的实现)
- 八皇后问题的一种解法
- 约瑟夫(Josephus)问题的实现
- 约瑟夫环问题单循环链表解法
- josephus问题的解法
- 约瑟夫环问题(Josephus Problem)C程序实现
- 打靶问题的一种递归解法