下图5张表,你从心理默念一个[1,31]以内的数,然后告诉我它在第几张表中,我能通过心灵感应知道你心中的那个数字是什么?
它其实是利用了整数的二进制表示方法,例如11的二进行为(1011),即11=8+4+1,而11在表1、2、4中均出现,因此,只需将表1、2、4中的第一个数字相加即为要猜的数字。
现在请你根据输入的数据,编程制作出这些魔法表格。
输入格式:
输入一个取值范围在1-63(含1和63)整数n。
输出格式:
输出n内对应的魔法表格:
先输出第几个魔法数组(从1开始编号 )
每4个一行,每个元素所占宽度为5
为简化输出格式,本题格式错误不扣分
输入样例:
14
输出样例:
第1个魔法数组
1 3 5 7
9 11 13
第2个魔法数组
2 3 6 7
10 11 14
第3个魔法数组
4 5 6 7
12 13 14
第4个魔法数组
8 9 10 11
12 13 14
代码实现:
nums=int(input())
lis=[ [ ] for i in range(10) ]
for i in range(1, nums+1):
l_i=str(bin(i))
for j, k in zip(l_i[ ::-1 ][ :-2 ], range(1000)):
# print(j,k,i)
if j == "1":
lis[ k ].append(i)
# print(lis)
times=1
for i in lis:
if i:
zhi=1
print() if times != 1 else None
print(f"第{times}个魔法数组")
for j in i:
print("{:>5}".format(j), end="")
zhi+=1
if zhi > 4:
print()
zhi=1
times+=1
print()
else:
break