Delete


私信TA

用户名:uq_36466309149

访问量:2525

签 名:

等  级
排  名 14550
经  验 877
参赛次数 0
文章发表 8
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

解题思路:找到规律即可

注意事项:主要要注意分段后可能剩下的不能组成k位的数值取值情况

参考代码:

import math

k,w=map(int,input().split())

a=math.ceil(w/k)#ceil函数向上取整,求可以分段的个数

b=w%k#求余数,即每k个分为一段后剩下的个数,例如输入3 7后,二进制形式如* *** ***

c=0

for i in range(1,a):#循环的次数等于位数的种数,例如题目例子里面位数可以为2或者3

    if i==a-1:#如果开始考虑取最大位数时的情况,例如题目中取3位数时

        for m in range(1,2**b):#循环次数等于最高位取值的个数,题中最高位只有取1一种情况,取值个数=2**位数-1,range中反正也只能取到之前一位不要减一了

            for n in range(1,2**k-m-i+1):#到达这一步说明下面的j循环已经结束了,所以从j循环结束时的值开始考虑,即2**k-i开始,然后随着最高位增加而减小

                c+=n

    else:

        for j in range(1,2**k-i):#循环都是从1开始,随着位数增加逐一减小,例如从6+5+4...+1到5+4...+1

            c+=j

print(c)

                


 

0.0分

1 人评分

  评论区

  • «
  • »