约瑟夫环的数组实现 __ 经典思考题原创解法.
2015-02-13 10:47
435 查看
题目:
约瑟夫(Josephus)问题是由古罗马的史学家约瑟夫提出的,他参加并记录了公元66-70年犹太人反抗罗马的起义。约瑟夫作为一个将军,设法守住了裘达伯特城达47天之久,在城市沦陷之后,他和40名将士在附近的一个洞穴中避难。在哪里,将士们群情激奋并表示:要投降毋宁死。于是,约瑟夫建议每个人轮流杀死他旁边的人,而这个顺序是由抽签决定的。约瑟夫有预谋地抓到了最后一签并且做为洞穴中两个幸存者之一生存下来。
约瑟夫环问题的具体描述是:
设有编号为1,2,......,n的n(n>0)个人围成一个圈,从第一个人开始报数,报到m时停止报数,报m的人出圈,再从他的下一个人起重新报数,报到m时停止报数,报m的出圈,......,如此下去,直到只剩下一人为止。当任意给定
n和 m后,设计算法求 n个人出圈的次序。
代码如下:
约瑟夫(Josephus)问题是由古罗马的史学家约瑟夫提出的,他参加并记录了公元66-70年犹太人反抗罗马的起义。约瑟夫作为一个将军,设法守住了裘达伯特城达47天之久,在城市沦陷之后,他和40名将士在附近的一个洞穴中避难。在哪里,将士们群情激奋并表示:要投降毋宁死。于是,约瑟夫建议每个人轮流杀死他旁边的人,而这个顺序是由抽签决定的。约瑟夫有预谋地抓到了最后一签并且做为洞穴中两个幸存者之一生存下来。
约瑟夫环问题的具体描述是:
设有编号为1,2,......,n的n(n>0)个人围成一个圈,从第一个人开始报数,报到m时停止报数,报m的人出圈,再从他的下一个人起重新报数,报到m时停止报数,报m的出圈,......,如此下去,直到只剩下一人为止。当任意给定
n和 m后,设计算法求 n个人出圈的次序。
代码如下:
#import <Foundation/Foundation.h>
//<span style="font-family: Arial, Helvetica, sans-serif;">SIZEONE 为数组大小 ,也就是存放一共有几个人, </span> //M为喊数字几就死一个人, 这里定义为3 也就是每当喊道 3 的那个人就死亡. #define SIZEONE 5 #define M 3 int main(int argc, const char * argv[]) {
//数组初始化为1. 1代表此人活着. 0代表此人已死. int a[SIZEONE] = {1,1,1,1,1}; int count = SIZEONE , panduan = 1 , i = 1 ,j = 0; while( count != 1) { panduan = 1; if( a[j % SIZEONE] == 1) { if(i % M == 0) { a[j % SIZEONE] = 0; printf("%d ",j % SIZEONE); count --; j++; i = 1; } else { i++; j++; } } else { while ( panduan ) { if( a[j % SIZEONE] == 1) { if(i % M == 0) { a[j % SIZEONE] = 0; printf("%d ",j % SIZEONE); count --; i = 1; j++; panduan = 0; } else { i++; j++; panduan = 0; } } else { j++; } } } } return 0; }
相关文章推荐
- 约瑟夫环的数组实现
- 约瑟夫环问题的 PHP 实现--使用 PHP 数组内部指针操作函数
- POJ 3928 Ping pong【树状数组经典难点实现】PS
- 用数组和链表实现约瑟夫环问题
- 【面试题经典重温【原创】】求子数组的最大和
- [原创]java实现约瑟夫环问题
- 经典数据结构--数组实现的栈
- 经典安全数组实现
- 数组实现约瑟夫环
- 约瑟夫环的数组实现方式
- 约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数
- 求连续子数组的最大和O(n)解法之思路与Java实现
- 约瑟夫环问题的数组实现
- POJ 3928 Ping pong【树状数组经典难点实现】PS
- 用c语言一位数组实现约瑟夫环
- 【原创】Android中ImageButton自定义按钮的按下效果的代码实现方法,附网上2种经典解决方法。
- [原创]超级经典聊天室系统实现 Ajax+PHP+Javascrcript+Json无刷新技术倾力打造(二)
- 约瑟夫环数组实现
- 经典抽象数据类型之堆栈实现(静态数组)
- 约瑟夫环的数组实现