2021招商银行信用卡Mgeeker竞赛

第一题在这里插入图片描述在这里插入图片描述

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项和)得到最终结果。

猜你喜欢

转载自blog.csdn.net/weixin_43518584/article/details/107769361
今日推荐