解题思路:
注意事项:
参考代码:
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 人评分
点我有惊喜!你懂得!浏览:2078 |
C语言训练-求矩阵的两对角线上的元素之和 (C语言代码)浏览:726 |
【回文数(二)】 (C语言代码)浏览:887 |
C语言程序设计教程(第三版)课后习题7.4 (C语言代码)浏览:613 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:614 |
WU-陶陶摘苹果2 (C++代码)浏览:980 |
【金明的预算方案】 (C++代码)浏览:849 |
Hello, world! (C语言代码)浏览:725 |
【亲和数】 (C语言代码)浏览:601 |
勾股数 (C语言代码)浏览:806 |