编程实现约瑟夫环问题
来源:互联网 发布:同城配送软件 编辑:程序博客网 时间:2024/05/29 14:06
据说著名犹太历史学家Josephus有过以下故事:在罗马人占领桥塔帕特后,39个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被人抓住,于是决定
了一个自杀方式,41个人排成一个圆圈,由第一个人开始报数,每报数到3的人就必须自杀,然后再由下一个人重新报数,直到所有人都自杀身亡为止。然而Josephus及他的朋友
并不想遵从,Josephus要他的朋友假装遵从,他将朋友与自己分别安排在第16个与31个位置,于是逃过了这场死亡游戏;
代码实现:
#include <stdio.h>#include <stdlib.h>#define N 41#define M 3struct node{ int data; struct node *link;};int ExitRing(int n, int m){ struct node *head,*p,*q; int result,i,j; head = (struct node *)malloc(sizeof(struct node)); head->data = 1; head->link = head; p = head; q = NULL; for(i = 2;i <= n;i++){ q = (struct node *)malloc(sizeof(struct node)); q->data = i; q->link = head; p->link = q; p = q; } for(i = 1;i <= n-1; i++){ for(j = 1;j <= m;j++){ p = q; q = q->link; } p->link = q->link; printf("%d ",q->data); free(q); q = p; } result = p->data; free(p); return result;}int main(){ int last; printf("出口顺序是:\n"); last = ExitRing(N,M); printf("%d",last); printf("\n最后一个是:%d \n",last); printf("\n"); return 0;}五个猴子(编号1~15)站成一群选大王,依次从1到3报数,数到3退出,往复从1到3报数,最后剩下一个猴子为王,求该猴子的编号;
代码实现:
#include <stdio.h>int main(){ int n, m, i, s = 0; printf ("输入猴子个数\n"); scanf("%d", &n); printf("输入猴子报数(>1)\n"); scanf("%d",&m); for (i = 2; i <= n; i++) { s = (s + m) % i; } printf ("\nThe winner is %d\n", s+1);}
阅读全文
0 0
- 编程实现约瑟夫环问题
- 约瑟夫环问题编程实现
- 编程实现约瑟夫环问题
- 【约瑟夫】编程实现约瑟夫环
- 约瑟夫环的问题编程C++实现
- 约瑟夫环问题-C++编程实现
- 约瑟夫环的编程实现
- 约瑟夫环问题的实现
- 类实现 约瑟夫环问题
- java实现约瑟夫环问题
- java实现约瑟夫环问题
- Java实现约瑟夫环问题
- 约瑟夫环问题--java实现
- Java实现约瑟夫环问题
- 约瑟夫问题、约瑟夫环
- 约瑟夫环(约瑟夫问题) 采用循环单链表实现
- Java编程题目-1:约瑟夫环问题
- [原创]java实现约瑟夫环问题
- 微信小程序点击tabBar刷新页面
- image not recognized
- HDU 1597(lower_bound+二分)
- CocoaPods的最新使用方法
- 如何更好的学习?
- 编程实现约瑟夫环问题
- C 作用域规则
- 最为详尽的WPF类继承关系
- android 压缩图片压缩到100K以下,并且宽高不超过1028
- 几个常用的小编码(目前就这么多,有待进步)
- layer的iframe弹窗,parent.(操作父页面)的使用限制
- SQLAlchemy 使用指导
- 常用权限和依赖
- 【数学期望 && 找规律】HDU