解题思路:
①可以看到题中只需要九位二进制数,全部情况列举只有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 人评分
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:686 |
C语言程序设计教程(第三版)课后习题8.9 (C语言代码)浏览:897 |
蛇行矩阵 (C语言代码)浏览:559 |
C语言程序设计教程(第三版)课后习题12.6 (C语言代码)浏览:732 |
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:536 |
C语言程序设计教程(第三版)课后习题7.4 (C语言代码)浏览:476 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:584 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:526 |
ACM俱乐部密码浏览:948 |
Manchester-弟弟的作业浏览:4152 |