第一题
n = int(input())
ls = list(map(int, input().split()))
for i in ls:
if i==0:
print(0)
else:
s=str(i)
cur=""
for j in s:
cur_le=bin(int(j))[2:]
cur_le="0"*(4-len(cur_le))+cur_le
cur+=cur_le
if len(cur)<12:
cur="0"*(12-len(cur))+cur
res=cur[::-1].lstrip('0')
print(int(res))
第二题:
挖个坑在这,没读懂题目意思
第三题:
输入:333 43434
输出:4
s ,count = [int(i) for i in input().split(' ')]
#考虑特殊情况
if count==0:
sum1=0
elif count<=s*s/4:
sum1=1
else:
c=0
n=1
while c<count:
c=c+float(s**2/2**(n+1))
n+=1 #计算批次N
#计算第N批分裂的次数
c=c-float(s**2/2**n) #此时c的值为前N-1批的能量和
last=count-c
n1=s/2**(n-1)
n1=n1*n1
n2=last//n1+1#第N批的分裂次数
n=n-2
#前N-1批的分裂次数加本批分裂次数
sum1=2**n-1+n2
print(sum1)
思路:将分裂看成细胞分裂问题,先是一个细胞分裂成为第二代的两个,第二代两个发展为第三代四个;对于本问题,第n批次的每个细胞分裂能量均为(s/2^n )^2, 若此批细胞全部分裂则总能量为 s^2/ 2^(n+1) ,先假设每批均全部分裂,然后找到能够达到目标能量的批次N,目标能量减去之前N-1批次分裂产生的所有能量后, 计算第N批时分裂的次数n2(看对应代码),第N批的分裂次数求得后加前N-1批的总分裂次数(等比数列前n项和)得到最终结果。