美文网首页
算法-约瑟夫环

算法-约瑟夫环

作者: 小DB | 来源:发表于2018-04-08 20:11 被阅读0次

有一个数组a[n]顺序存放0~n-1,要求每隔step个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。以8个数(N=7)为例:{0,1,2,3,4,5,6,7},0->1->2(删除)->3->4->5(删除)->6->7->0(删除),如此循环直到最后一个数被删除。

//n :总数  step:步长
- (int)func:(int)n step:(int)step {
    //数组:0,1,2,3,4,5,6
    NSMutableArray *array = [NSMutableArray array];
    for (int i = 0; i < n; i++) {
        [array addObject:[NSNumber numberWithInt:i]];
    }
    int stepFlag = 0;//步长计数
    int currentSize = n;//当前数组有效长度
    NSNumber *DELETE = @(-1);//删除标识位
    int lastDeleteIndex = 0;//最后被删除的元素下标
    int i = 0;//循环下标
    while (currentSize != 0) {
        //没到最后一直循环
        if (array[i] != DELETE){//判断当前元素是否等于删除标志
            if (stepFlag ++ == step) {
                array[i] = DELETE;
                lastDeleteIndex = i;
                currentSize --;
                stepFlag = 0;
            }

        }
        i = (i+1)%n;
    }
    return lastDeleteIndex;
}

相关文章

  • 算法-约瑟夫环

    有一个数组a[n]顺序存放0~n-1,要求每隔step个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉...

  • 约瑟夫环算法

    什么是约瑟夫环呢?约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在...

  • 算法--约瑟夫斯环

    n个人围成一个圆圈,编号为1~n,从第一号开始报数,报到m的倍数的人离开, 一直数下去,直到最后只有一个人, 求此人编号

  • 算法题—约瑟夫环问题

    前言 本文编程语言使用Java 问题概述 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕...

  • 约瑟夫环问题

    约瑟夫环问题约瑟夫环描述:约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围...

  • 循环单链表实现约瑟夫环(C语言)

    约瑟夫环

  • 约瑟夫环

    题目:100名学生围成一个圈, 编号从1到100,从第一名学生开始报数,从1-9报数 每报出9就退出,直到所有学生...

  • 约瑟夫环

  • 约瑟夫环

    问题:1~n个人围成一圈,从1开始报数,每次数到m这个人就出列,问最后剩下的是几号? 做法:递归。 假设剩下的是f...

  • 约瑟夫环

    解法一 用一个list模拟删除过程 解法二 数学公式,推到过程还没看懂

网友评论

      本文标题:算法-约瑟夫环

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