一個可能要遞迴才能解的問題,我卡住了.. |
答題得分者是:jow
|
mitchellhu
一般會員 發表:23 回覆:53 積分:15 註冊:2007-06-12 發送簡訊給我 |
我的問題是看起來很簡單,但是我推算不出來....
題目是:若有N個不重複的字串,列出所有組合。 例如:stringA :='A', StringB :='B', StringC := C ,StringD = 'D' 所有排列方式有: 1.A 2.B 3.C 4.D 5.A,B 6.AC 7.A,D 8.B.C 9.B.D 10.C.D 11.A.B.C 12.A.B.D 13.A,C,D 14.B.C.D 15.A.B.C.D 請問這產生這樣組合的,邏輯是如何寫出的。 感覺上可以寫出一個遞迴函式來解出的,但是我一直整理不出來。 請教各位先進可否指點迷津。 感謝您 |
mitchellhu
一般會員 發表:23 回覆:53 積分:15 註冊:2007-06-12 發送簡訊給我 |
|
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
[code delphi] procedure TForm1.Button1Click(Sender: TObject); var S: string; L: TStringList; I,J: Integer; begin L := TStringList.Create; try for I := 1 to 15 do begin S := ''; for J := 0 to 3 do if (I shr J) and 01 <> 0 then S := S Char(Ord('A') J); L.Add(Format('%2.2d.%s',[I,S])); end; ShowMessage(L.Text); finally FreeAndNil(L); end; end; [/code]
編輯記錄
jow 重新編輯於 2011-05-25 18:22:51, 註解 無‧
|
mitchellhu
一般會員 發表:23 回覆:53 積分:15 註冊:2007-06-12 發送簡訊給我 |
===================引 用 jow 文 章=================== [code delphi] procedure TForm1.Button1Click(Sender: TObject); var S: string; L: TStringList; I,J: Integer; begin L := TStringList.Create; try for I := 1 to 15 do begin S := ''; for J := 0 to 3 do if (I shr J) and 01 <> 0 then S := S Char(Ord('A') J); L.Add(Format('%2.2d.%s',[I,S])); end; ShowMessage(L.Text); finally FreeAndNil(L); end; end; [/code] jow 老大: 感謝您的回覆。 您的解法讓我大開眼界。不用遞迴也可以解。 分數先送上了 感謝您。 我自已後來也有解出來,是用遞迴的方式去處理。 事實上我的需求是142個不重覆字串中求出所有不重覆的組合。 我只是想先簡化來建構程式。雖然可以作,但實務上卻不實用。 因為僅僅142!=2.69536413788816E245 就是天文數字了 看到你使用 shr 來檢查string的長度,猛然發現 什麼叫"基本功"的運用了 看code照抄 行之多年 僵化和愚笨了 感謝您!
編輯記錄
mitchellhu 重新編輯於 2011-05-31 05:12:49, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |