解题思路:
注意事项:
参考代码:
def ck(m):
result=1
for i in range(1,m+1):
result*=i
return result
def cnn(a,b):#求组合数
if a>b or b<0:
return 0
return ck(b)/(ck(a)*ck(b-a))
k,w=map(int,input().split())
if k>=1 and k<=9:
num=2**(k)-1#num 进制一位上可取最大的数
if w%k==0:
count=0
all_digit =w/k
if num>all_digit:
count=cnn(num,all_digit)
else:
for x in range(2,num+1):
count+=cnn(x,num)
print(int(count))
else:
first_can=2**(w%k)-1 #首位可以取的最大值
digit=w//k #不包括首位的个数
count=0
#不包括首位的所有可能个数
for i in range(2,digit+1):
count+=cnn(i,num)
#包括首位的可能个数
for j in range(1,first_can+1):
count+=cnn(digit,num-j)
print(int(count))
0.0分
2 人评分
C语言程序设计教程(第三版)课后习题7.4 (Java代码)浏览:839 |
【偶数求和】 (C++代码)浏览:702 |
简单的a+b (C语言代码)浏览:537 |
WU-链表数据求和操作 (C++代码)浏览:1312 |
C语言程序设计教程(第三版)课后习题8.8 (C语言代码)浏览:853 |
C语言程序设计教程(第三版)课后习题10.4 (C语言代码)浏览:879 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)from DQM浏览:653 |
1157题解浏览:711 |
矩阵乘方 (C语言代码)浏览:1022 |
C语言程序设计教程(第三版)课后习题10.5 (C语言代码)浏览:534 |