解题思路:
注意事项:
参考代码:
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语言程序设计教程(第三版)课后习题11.8 (C语言代码)浏览:622 |
2004年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:466 |
C语言程序设计教程(第三版)课后习题7.1 (C语言代码)浏览:1229 |
C语言训练-计算t=1+1/2+1/3+...+1/n (C语言代码)浏览:907 |
1113题解浏览:789 |
分糖果 (C语言代码)浏览:920 |
C二级辅导-统计字符 (C语言代码)浏览:647 |
小O的数字 (C语言代码)浏览:1411 |
C语言程序设计教程(第三版)课后习题10.3 (C语言代码)浏览:840 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:376 |