约瑟夫环的数组实现 __ 经典思考题原创解法.

来源:互联网 发布:淘宝几块钱的东西包邮 编辑:程序博客网 时间:2024/05/16 17:22

题目: 

约瑟夫(Josephus)问题是由古罗马的史学家约瑟夫提出的,他参加并记录了公元66-70年犹太人反抗罗马的起义。约瑟夫作为一个将军,设法守住了裘达伯特城达47天之久,在城市沦陷之后,他和40名将士在附近的一个洞穴中避难。在哪里,将士们群情激奋并表示:要投降毋宁死。于是,约瑟夫建议每个人轮流杀死他旁边的人,而这个顺序是由抽签决定的。约瑟夫有预谋地抓到了最后一签并且做为洞穴中两个幸存者之一生存下来。

约瑟夫环问题的具体描述是:

设有编号为12......nn(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 3int 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;}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 玻璃瓶玻璃盖子打不开怎么办 美甲没有胶水怎么办 按压式瓶盖打不开怎么办 睫毛胶水瓶盖打不开怎么办 玻璃杯盖子滑丝怎么办 瓶盖滑扣了怎么办 胶水瓶口被塞住怎么办 美林盖子打不开怎么办 美林瓶盖打不开怎么办 泰诺瓶盖打不开怎么办 玻璃罐头瓶盖打不开怎么办 塑料罐头瓶盖打不开怎么办 喷笔壶盖打不开怎么办 陶瓷壶盖卡住了怎么办 贝德玛瓶盖摔坏怎么办 塑料盖子错位拧不开怎么办 安全瓶盖坏了怎么办 刚买面霜打不开怎么办 可乐瓶盖鼓起来怎么办 暖壶塞子吸住了怎么办 茶兀瓶盖打不开怎么办 水杯盖太紧了拧不开怎么办 矿泉水瓶盖拧不开了怎么办 弩弦用手拉不上怎么办 茅台酒瓶口漏酒怎么办 化妆品盖子丢了怎么办 化妆品盖子碎了怎么办 自制水泵压力小怎么办 大学数学不会做怎么办 下雪了怎么办教案幼儿园小班 下水道被混凝土堵塞怎么办 日本足贴丢了胶布怎么办 牙齿被可乐腐蚀怎么办 三十岁满嘴无牙怎么办 水乳盖子打不开怎么办 蜂蜜罐子打不开了怎么办 蜂蜜盖子第二次拧不开怎么办 玻璃杯子拧不开盖子怎么办 玻璃杯水杯盖子拧不开怎么办 鞋子蝴蝶结掉了怎么办 蝴蝶翅膀受伤了怎么办