橙子的坚果奶盖


私信TA

用户名:20010612ii

访问量:642

签 名:

等  级
排  名 10754
经  验 1068
参赛次数 0
文章发表 3
年  龄 0
在职情况 学生
学  校 郑州大学
专  业

  自我简介:

解题思路:

①可以看到题中只需要九位二进制数,全部情况列举只有512种,可以直接挨个进行模拟,对于每一种情况,记录这种情况的操作完成后九盏灯的状态,如果最终开着的灯有四个,则这种情况是成立的,输出。

②定义b(x)函数将十进制x变为题中所需的九位二进制,为了方便下标,此处为十位,下标为0的第一位无意义,仅用来占位

③定义change(n)函数改变第n个灯的状态,此处可以用+1对2求余数的方法达到0和1之间的转换,0代表关灯,1代表开灯注意事项:

④字典d记录开第几个开关后,第几个灯的状态发生改变

参考代码:

#定义b(x)函数将十进制x变为题中所需的九位二进制,为了方便下标,此处为十位,下标为0的第一位无意义,仅用来占位
def b(x):
    s=bin(x)[2:]
    return '0'*(10-len(s))+s#十位,第零位恒为零

#定义change(n)函数改变第n个灯的状态,此处可以用+1后对2求余数的方法达到0和1之间的转换,0代表关灯,1代表开灯注意事项:
def change(n):
    l[n]=(l[n]+1)%2

#记录开第几个开关后,第几个灯的状态发生改变
d={1:[2,4],2:[1,3,5],3:[2,6],4:[1,5,7],5:[2,4,6,8],6:[3,5,9],7:[4,8],8:[5,7,9],9:[6,8]}
    
for i in range(513):#对512种情况进行模拟
    l=[0]*10#记录九盏灯的状态,第零位空着,0代表关、1代表开
    s=b(i) #得到十进制数的十位二进制表达
    for k in range(1,10):#这十位0和1中
        if(s[k]=='1'):#若有某位为1,表示第几个开关开了
            for j in d[k]:#遍历这个开关控制的灯
                change(j)#改变一次这些灯的状态
    if(l.count(1)==4):#如果最终开着的灯有四个
        print(s[1:])#输出这种情况


 

0.0分

3 人评分

  评论区

  • «
  • »