100盏灯被100个学生依次按照顺序,操作灯序号自身序号倍数

描述:

一间屋子里有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 );
        }
    }];
}

你可能感兴趣的:(100盏灯被100个学生依次按照顺序,操作灯序号自身序号倍数)