全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1413
推到 Plurk!
推到 Facebook!

一個可能要遞迴才能解的問題,我卡住了..

答題得分者是:jow
mitchellhu
一般會員


發表:23
回覆:53
積分:15
註冊:2007-06-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-05-23 22:57:34 IP:123.204.xxx.xxx 訂閱
我的問題是看起來很簡單,但是我推算不出來....
題目是:若有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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-05-24 11:59:42 IP:123.204.xxx.xxx 訂閱
今天我自已有想到一種賤招,因為任一種組合中,字串值是不可重覆的,而且4選1組合 4選2組合 4選3組合 4選4組合,中的每一組合方式可以用公式求得組 合數,所以可以用亂數來產生組合,再用前面說的2個條件來濾掉。 這也是可以求出所有組合。
但是這可能沒有品質吧有時快有時慢的,我猜。
看看各位大人還有良方嗎?
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-05-25 21:46:11 IP:123.193.xxx.xxx 未訂閱

[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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2011-05-31 19:09:32 IP:123.204.xxx.xxx 訂閱

===================引 用 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, 註解 無‧
系統時間:2024-04-26 0:35:56
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!