美文网首页
约瑟夫问题 Objective-C

约瑟夫问题 Objective-C

作者: long弟弟 | 来源:发表于2021-11-07 00:58 被阅读0次

    约瑟夫问题简介

    39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。

    Objective-C语言实现

        //创建包含1~41的数组
        NSMutableArray *array = [NSMutableArray array];
        for (NSInteger i = 1; i <= 41; i++) {
            [array addObject:@(i)];
        }
        
        //从"1"开始数,第0个位置
        NSInteger j = [array indexOfObject:@(1)];
        //1、2、3、1、2、3...的开始数
        for (NSInteger i = 1; i <= 3; i++, j++) {
            //从头开始数
            if (j > array.count - 1) {
                j = 0;
            }
            NSLog(@"数到%ld:位置%ld", i, j);
            if (i == 3) {
                i = 0; //i++自动加1,保证继续数数
                //移除:数到3,等于3就移除
                //NSLog(@"移除:%@", [array objectAtIndex:j]);
                [array removeObject:[array objectAtIndex:j]];
                j--; //删除之后更新现在的位置
                
                //剩余约瑟夫和他的朋友
                if (array.count <= 2) {
                    NSLog(@"剩下:%@", array);
                    return;
                }
            }
        }
    

    理解j--
    1 2 3 4 5 6 7 8 9 10 ...
    1 2 3 1 2 3数数
    0 1 2 位置
    将3删除
    1 2 4 5 6 7 8 9 10 ...
    0 1 2 位置
    4就变成在数组的第2个位置上

    输出结果:

    剩下:(
        16,
        31
    )
    

    相关文章

      网友评论

          本文标题:约瑟夫问题 Objective-C

          本文链接:https://www.haomeiwen.com/subject/abvszltx.html