描述:
一间屋子里有100盏灯排成一行,按从左至右的顺序编号1、2、3、4、5…99、100,
每盏灯都有一个开关,开始全部都关着,现有100个学生,
第1个学生把1的倍数的灯全部拉一下,
第2个学生把2的倍数灯全部都拉一下,
第3个学生把3的倍数灯全部都拉一下
…
第100个学生把100的倍数灯全部都拉一下,
这时灯有多少是开着的?
代码:
- (void)test4{
NSMutableArray *arrs = [NSMutableArray array];
int count = 100;
//alloc 100盏灯
for (int i = 0; i < count; i ++) {
//默认所有灯关闭
[arrs addObject:@(0)];
}
//遍历每一栈灯
for (int i = 1; i < count+1; i ++) {//数组index从0 开始,为了对齐与学生的序号,此处从1开始循环,循环次数100
//每个学生操作一次:
//规律: 第 i 个学生 智能操作与其序号成倍数的灯,即 操作的灯对其序号的余数为0;
for (int j = 1; j < count + 1; j ++) {//数组index从0 开始,为了对齐与灯的序号,此处从1开始循环,循环次数100
if (j % i == 0 && j >= i) {
arrs[j - 1] = @(![[arrs objectAtIndex:j - 1] intValue]);
}
}
}
[arrs enumerateObjectsUsingBlock:^(NSNumber* _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if (obj.intValue == 1) {
NSLog(@"== %lu", idx +1 );
}
}];
}