算法-约瑟夫环

有一个数组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;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 14,029评论 0 38
  • 突然间,过往的一些不曾刻意怀念的画面,可能发生在许多年以前,模糊零碎的漂浮到脑海里,有关亲人,也有些是电影中的场景...
    eae791833651阅读 784评论 4 3
  • 北方的春天终于来了,下午带着孩子在小区探险找春天。接连几天得雾霾,也把我得耐心折腾到极致。好在几个月以后终于要离开...
    九河嘛嘛阅读 179评论 0 0
  • 第十二章 我们和狼陷入了僵局,我实在坚持不住了,就昏了过去,当我醒来时,已经是早上了,狼也不见了。 我我一往后看,...
    帅云吞1阅读 99评论 0 0
  • 我用蹒跚深浅的碎步 吵醒了瞌睡的清晨 形只的影子 要在黄昏被拉的很长很长 村口的老槐树 没有了浓密茂盛 很多鸟已经...
    止语静默阅读 427评论 30 34