2011-12-07 23 views
0

不太清楚如何描述這一點,但我喜歡玩一個文字遊戲,我想作爲一個計算機程序來實現。「整合」算法名稱/執行

最基本的要點是你看字母的值(A = 1..Z = 26),並把字母儘可能地合併,並且這些字母是彼此最接近的。

舉個例子:

s t a c k 

總和值

19 + 20 + 1 + 3 + 11 = 54 

查找最少數量的字母:

ceil(54/26) = 3 

選擇字母彼此最接近

54/3 = 18 

要顯示的字母應該是rrr

這恰好是一個簡單的例子。當你需要擁有rrs(如果你的初始字符串是'堆棧'),它會是什麼樣子?

這是否已經有一個我可以查找和執行的名稱?

回答

3

我認爲你的問題歸結爲:給予nk,發現數字r1r2,...,rk這樣sum(r1 + r2 + ... + rk) = nmax(r1, r2, ..., rk) - min(r1, r2, ..., rk)儘可能小。

的解決方案是挑r = floor(n/k),和設定數字的n mod kr + 1,其餘r

例如,如果n = 55k = 3(你的例子),我們有floor(55/3) = 1855 mod 31,因此該解決方案是19, 18, 18

剩下的就是在數字和字母之間進行轉換。

+0

還沒有編碼出來,但想驗證它也會給出一個像'ssttt'這樣的精簡列表(如果總數爲98) – warren