不太清楚如何描述这个,但是我有一个我喜欢玩的文字游戏,我想作为一个计算机程序来实现。
基本的要点是,你看字母的值(A=1..Z=26),然后把字母合并成尽可能少的,并且是彼此最接近的。
例如:
s t a c k
求和
19 + 20 + 1 + 3 + 11 = 54
查找最少的字母数:
ceil(54/26) = 3
选择最接近的字母
54/3 = 18
要显示的字母应该
rrr
。这恰好是一个简单的例子。当你需要,比如说,
rrs
(如果你的初始字符串是一个堆栈)时会是什么样子?这已经有一个我可以查找和实现的名称了吗?
最佳答案
我认为你的问题可以归结为:给定n
和k
,找到数字r1
,r2
,…,rk
,这样sum(r1 + r2 + ... + rk) = n
和max(r1, r2, ..., rk) - min(r1, r2, ..., rk)
就越小越好。
解决方案是pickr = floor(n / k)
,并将n mod k
的数字设置为r + 1
,其余的设置为r
。
例如,如果n = 55
和k = 3
(您的示例),我们有floor(55/3) = 18
并且55 mod 3
是1
,因此解决方案是19, 18, 18
。
剩下的就是数字和字母之间的转换。
关于string - “合并”算法名称/实现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8422961/