有一个数组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;
}
网友评论