第一行是一個數字,int x。以下m行包含字母。在m行之後,你讀了一個數字,int y。跳過遞歸
的目標是找到soluiton數,INT Y,從每行1個字母的遞歸。
的問題指出,有這避免了通過每個可能的口令會更快的解決方案。這是我的問題所在。如何才能做到這一點?任何幫助將不勝感激。
第一行是一個數字,int x。以下m行包含字母。在m行之後,你讀了一個數字,int y。跳過遞歸
的目標是找到soluiton數,INT Y,從每行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結束。它消除了遞歸,但這沒有問題,是嗎? ;)
它是功課嗎? – vikingosegundo
這是在stackoverlow不知何故comon意義,不只是寫作業代碼的問題,因爲它讓你不學習。呦應該顯示,你到目前爲止已經解釋,你卡在哪裏。 – vikingosegundo
@vikingosegundo我認爲在很多情況下人們不知道從哪裏開始。一些提示不會傷害,特別是如果他們讓人們朝着正確的方向思考 – SheetJS