2013-09-16 47 views
0

第一行是一個數字,int x。以下m行包含字母。在m行之後,你讀了一個數字,int y。跳過遞歸

的目標是找到soluiton數,INT Y,從每行1個字母的遞歸。

的問題指出,有這避免了通過每個可能的口令會更快的解決方案。這是我的問題所在。如何才能做到這一點?任何幫助將不勝感激。

+0

它是功課嗎? – vikingosegundo

+0

這是在stackoverlow不知何故comon意義,不只是寫作業代碼的問題,因爲它讓你不學習。呦應該顯示,你到目前爲止已經解釋,你卡在哪裏。 – vikingosegundo

+0

@vikingosegundo我認爲在很多情況下人們不知道從哪裏開始。一些提示不會傷害,特別是如果他們讓人們朝着正確的方向思考 – SheetJS

回答

-1

這並不複雜。你可以計算m行中的字母數量。然後,計算每行字母的值,如果跳過了參考行中的一個字母,則會指定跳過多少種可能的解決方案。可視化:

abc -> 3 letters 
xy -> 2 letters 
dmnr -> 4 letters 

,如果你從「ABC」行第n個字母到第n + 1個字母跳過,跳過許多可能的解決方案,因爲每個以下行的長度的乘積表示, 。所以你跳過2 * 4解決方案 - >8 solutions

重複此步驟XY - >4 solutions跳過。

最後一行跳過alwasy 1 solution,因爲它是遞歸路徑本身。

所以現在你知道了,你有多少解決方案跳過,如果你跳過一些特定字母。最後一件事很簡單。您從1開始,將每行的計算值添加到數字中,直到達到完全r。

意味着C++:

int v = 1, r=10; 
int i1=0, i2=0, i3=0; 

while (v<=r-8) { 
    i1++; 
    v+=8; 
} 
while (v<=r-4) { 
    i2++; 
    v+=4; 
} 
while (v<=r-1) { 
    i3++; 
    v++; 
} 

現在I1是你需要從「ABC」行中使用字母的指數,I2爲「XY」信和i3從「dmnr索引「 :) 就這樣。 > 「B」 + 「X」 + 「m」 個

我希望這有助於 - 算法應採用i1 = 1,I2 = 0,I3 = 1結束。它消除了遞歸,但這沒有問題,是嗎? ;)