鱼C论坛

 找回密码
 立即注册
查看: 16801|回复: 73

[作品展示] python解一道有趣的智力题(开箱子)

[复制链接]
发表于 2017-1-26 16:21:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
过年在家闲来无事就看看有什么好玩的智力题,看到这样一道题目:开箱子。

题目:
走廊上有100个关上的储物柜。有个人先是将100个柜子全都打开。接着,每数两个柜子关上一个。
然后,在第三轮时,再每隔两个就切换第三个柜子的开关状态(也就是将关上的柜子打开,将打开的关上)。
照此规律反复操作100次,在第i轮,这个人会每数i个就切换第i个柜子的状态。
当第100轮经过走廊时,只切换第100个柜子的开关状态,此时有几个柜子是开着的?分别是哪几个箱子?

这题据说是微软的面试题,你会解么?

用python写程序的话,20行代码都不用,大家先动动脑筋,我的解答公布在下面。

源代码:
游客,如果您要查看本帖隐藏内容请回复

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
joycmk + 1 + 1 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-1-26 21:05:29 | 显示全部楼层
牛逼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-1-27 19:30:52 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-1-29 10:48:49 | 显示全部楼层
a = []
n = 100
for i in range(n):
    a.append(False)

for i in range(1, n+1):
    for j in range(0, n, i):
        a[j] = not a[j]

for i in range(n):
    if a[i]:
        print(i, end=' ')


1 4 9 16 25 36 49 64 81
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-29 12:16:49 | 显示全部楼层
感谢群主
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-29 14:58:15 | 显示全部楼层
楼主厉害!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-29 21:15:39 | 显示全部楼层
牛人
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-1-29 21:29:19 | 显示全部楼层
boxes = [False for i in range(100)]
for i in range(1, 101):
    for j in range(i - 1, 100, i):
        boxes[j] = not boxes[j]
for n, i in enumerate(boxes):
    if i:
        print('Box %d is open'%(n + 1))
print('Total %d boxes are open'%boxes.count(True))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-29 23:06:17 | 显示全部楼层
from collections import OrderedDict
box=OrderedDict()
box=box.fromkeys(range(1,101),1)
for k in box.keys():
    if k%2==0 and k>=2:
        box[k]=0
for i in range(3,101):
    for k in box.keys():
        if k>=i and k%i==0:
            if box[k]==1:
                box[k]=0
            else:
                box[k]=1
for k,v in box.items():
    if v==1:
        print(k,end=' ')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-30 15:28:27 | 显示全部楼层
box = [-1] * 100
for i in range(1,101):
    for n in range(1, 101):
        if (i * n - 1) < 100:
            box[i * n - 1] = -box[i * n - 1]
        else:
            break
for i in range(100):
    if box[i] == 1:
        print('第',i+1,'个箱子是打开的')
c = box.count(1)
print('共有', c, '个箱子打开')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-8 17:24:29 | 显示全部楼层
本帖最后由 余欲渔 于 2017-2-8 17:27 编辑

不知道解的对不对
for i in range(1,101):
    k=0
    for j in range(1,i+1):
        if i%j==0:
            k+=1
    if k%2==1:
        print('第',i,'个箱子是开着的')
第 1 个箱子是开着的
第 4 个箱子是开着的
第 9 个箱子是开着的
第 16 个箱子是开着的
第 25 个箱子是开着的
第 36 个箱子是开着的
第 49 个箱子是开着的
第 64 个箱子是开着的
第 81 个箱子是开着的
第 100 个箱子是开着的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-8 17:25:09 | 显示全部楼层
本帖最后由 余欲渔 于 2017-2-8 17:29 编辑

看很多鱼油用了列表。就是能否被整除的问题,能整除就是会碰到,不能整除就碰不到,每次碰到箱子的状态就变动一次
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-8 18:31:19 | 显示全部楼层
谢谢楼主分享,难度一般应该。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-9 00:58:50 From FishC Mobile | 显示全部楼层
厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-10 16:06:58 | 显示全部楼层
本帖最后由 Jonin616 于 2017-2-10 19:20 编辑
#20170210 开100个柜子
def xbox():
    xbox = [0] * 100
    for turn in range(0,100):
        swithSnum = 100 // (turn + 1)
        i = 1
        while i <= swithSnum:
            if xbox[(turn + 1) * i - 1] :
                xbox[(turn + 1) * i - 1] = 0
            else:
                xbox[(turn + 1) * i - 1] = 1
            i += 1
    for each in xbox:
        if each:
            print('第%d个盒子是开的' % (num + 1))  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-17 18:18:14 From FishC Mobile | 显示全部楼层
haha
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-20 08:13:04 From FishC Mobile | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-21 21:20:16 From FishC Mobile | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-21 21:45:59 From FishC Mobile | 显示全部楼层
4 9 16 25 36 49 64 81 100
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-22 17:07:14 From FishC Mobile | 显示全部楼层
余欲渔 发表于 2017-2-8 17:24
不知道解的对不对

运行结果正确,代码看不懂。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 02:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表