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

算法-约瑟夫环

作者: 小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;
    }
    

    相关文章

      网友评论

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

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