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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值