题目描述
小易在学校中学习了关于字符串的理论, 于是他基于此完成了一个字典的项目。
小易的这个字典很奇特, 字典内的每个单词都包含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
原文地址:https://www.cnblogs.com/asenyang/p/11235652.html
时间: 2024-10-11 01:55:26