数据结构与算法(单循环链表_约瑟夫问题)
2015-06-09 23:02
351 查看
据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus和他的朋友并不想遵从,Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。
我这个程序写到最后,整个循环链表都拆了····找个时间再优化一下···
编程:实现打印出自杀的犹太人的顺序,剩下约瑟夫和他的朋友不用死。
我这个程序写到最后,整个循环链表都拆了····找个时间再优化一下···
编程:实现打印出自杀的犹太人的顺序,剩下约瑟夫和他的朋友不用死。
#include<stdio.h> #include<stdlib.h> #include<malloc.h> int PEODATA; //人数 #define LEN sizeof(struct listdata) typedef struct listdata { int num; struct listdata *next; }node; node *Clist() { int i; node *Head = NULL; node *P1,*P2; for(i = 1;i < 42;i++) { if(Head == NULL) { P1 = (node*)malloc(LEN); P1->num = i; P2 = P1; Head = P1; PEODATA++; } else { P1 = (node*)malloc(LEN); P1->num = i; P2->next = P1; P2 = P1; PEODATA++; } } P1->next = Head; return Head; } node *OVlist(node *head) { int i; node *P1,*P2; P2 = P1 = head; while(PEODATA != 2) { for(i = 1;i < 3;i++) { if(i == 2) { P2 = P1->next; P1->next = P2->next; printf("第%d个人自杀了\n",P2->num); free(P2); } P1 = P1->next; } PEODATA--; } return head; } void main() { node *head; system("color 0A"); PEODATA = 0; printf(" /*********************/ \n"); printf(" 循环链表应用:约瑟夫问题 \n"); printf(" 编写者: H \n"); head = NULL; head = Clist(); printf("41个人已围成一个圈,约瑟夫在第16个位置,约瑟夫的朋友在第31个位置.\n"); printf("自杀游戏开始!\n\n"); head = OVlist(head); printf("\n约瑟夫和他的朋友生存了下来!\n"); }
相关文章推荐
- 数据结构算法代码实现——循环链表、双向链表(五)
- To_10_r_100_3---求子数组的最大和
- 大话数据结构—平衡二叉树(AVL树)
- COJ WZJ的数据结构(负十八)splay_tree的天堂
- ACM常用数据结构
- 数据结构(一)---链表:
- 大话数据结构—二叉排序树
- 数据结构实验:连通分量个数
- 数据结构实验:连通分量个数 分类: 图论 2015-06-09 17:33 8人阅读 评论(0) 收藏
- 大话数据结构—顺序表、有序表、线性索引查找
- 算法和数据结构就是编程的一个重要部分,你若失掉了算法和数据结构,你就把一切都失掉了。
- C++数据结构 链表的基本操作
- C++ 数据结构、算法笔试题(1)
- 数据结构之链表2
- leetcode--Remove Duplicates from Sorted Array II
- 12. C#数据结构与算法 -- 顺序栈
- 数据结构----图(邻接矩阵用法)
- tarjan算法原理介绍
- 【 数据结构】实现二叉树以及其基本操作
- 【数据结构】栈的应用——中缀表达式求值(c++)