小易的字典

题目描述
小易在学校中学习了关于字符串的理论, 于是他基于此完成了一个字典的项目。
小易的这个字典很奇特, 字典内的每个单词都包含n个'a'和m个'z', 并且所有单词按照字典序排列。
小易现在希望你能帮他找出第k个单词是什么。

输入描述:
输入包括一行三个整数n, m, k(1 <= n, m <= 100, 1 <= k <= 109), 以空格分割。

输出描述:
输出第k个字典中的字符串,如果无解,输出-1。

 1 def Cnm(a, b):
 2     ans =1
 3     for i in range(a+1, a + b +1):
 4         ans *=i
 5     for i in range(1, b +1):
 6         ans //=i
 7     return ans
 8   
 9 n, m, k =map(int, input().strip().split())
10 if Cnm(n, m) < k:
11     print(-1)
12 else:
13     ans =""
14     while n > 0 and m > 0:
15         temp =Cnm(n -1, m)
16         if temp <k:
17             k-=temp
18             ans +="z"
19             m -=1
20         else:
21             ans +="a"
22             n -=1
23     ans +="a"*n
24     ans +="z"*m
25     print(ans)

又是数学计算类的题目,算法思路是排列组合,但是不能穷举所有排列。

参考:https://www.nowcoder.com/profile/1424034/codeBookDetail?submissionId=31703838

 

posted on 2019-07-24 08:33  Sempron2800+  阅读(427)  评论(0编辑  收藏  举报