问题描述
每年冬天,北大未名湖上都是滑冰的好地方。北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰鞋都不剩。
每天早上,租鞋窗口都会排起长龙,假设有还鞋的m个,有需要租鞋的n个。现在的问题是,这些人有多少种排法,可以避免出现体育组没有冰鞋可租的尴尬场面。(两个同样需求的人(比如都是租鞋或都是还鞋)交换位置是同一种排法)
输入格式
两个整数,表示m和n
输出格式
一个整数,表示队伍的排法的方案数。
样例输入
3 2
样例输出
5
直接穷举出所有可能的情况,统计所有的个数即可,当换鞋子的人数大于借鞋子人数时,才可以借出鞋子,只要还鞋子的人数小于m,表示鞋子没有还完,便可以继续还鞋子。当临时字符串的长度等于m+n便获得一个合法的解,将其加入到解列表。
def weiminhudefanlao(m,n):
if m<n:return 0
res=[]
def back(huan,jie,temp):
if len(temp)==n+m:
res.append(temp)
return
if huan<m:
back(huan+1,jie,temp+'+')#+号表示还鞋子
if huan>jie and jie<n:
back(huan,jie+1,temp+'-')#-号表式借鞋子
back(0,0,'')
#print(res) #可以打印出所有的情况
return len(res)
if __name__=='__main__':
m,n=map(int,input().split())
#m个人还鞋,n个人借鞋
print(weiminhudefanlao(m,n))
可以打印出3人还鞋子,2人借鞋子时的所有情况