不太清楚如何描述这个,但我有一个我想玩的文字游戏,我想将其作为一个计算机程序来实现。
基本要点是你要看字母的值(A = 1..Z = 26),并将字母合并到尽可能少的字母,并且这些字母最接近彼此。
举个例子:
s t a c k
求和值
19 + 20 + 1 + 3 + 11 = 54
找到最少的字母数:
ceil(54/26) = 3
选择彼此最接近的字母
54/3 = 18
要显示的字母应为rrr
。
这恰好是一个简单的例子。例如,当您需要rrs
时(如果您的初始字符串是'堆栈'),它会是什么样子?
这是否已经有了我可以查找和实现的名称?
答案 0 :(得分:3)
我认为您的问题归结为:给定n
和k
,找到数字r1
,r2
,...,rk
,以便sum(r1 + r2 + ... + rk) = n
和max(r1, r2, ..., rk) - min(r1, r2, ..., rk)
尽可能小。
选择解决方案r = floor(n / k)
,并将数字n mod k
设为r + 1
,其余为r
。
例如,如果n = 55
和k = 3
(您的示例),我们floor(55/3) = 18
和55 mod 3
是1
,因此解决方案是{{1 }}
剩下的就是在数字和字母之间进行转换。