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

ListBox排列組合問題

答題得分者是:richtop
Sei
一般會員


發表:22
回覆:38
積分:17
註冊:2002-05-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-09-15 12:02:55 IP:61.221.xxx.xxx 未訂閱
各位前輩: 我在http://delphi.ktop.com.tw/topic.php?TOPIC_ID=56355這裡有上傳求助程式 裡面是透過Listbox做排列組合,有用到站長的一隻function NClass(階層) 原本設計是讓使用者按▲▼去做數字的調整 後來改成自動調整,就必需用到排列組合 不知道是不是我數學太差了 排出來的結果好像不太一樣,會有重覆的情況發生 弄了很久還是搞不清楚卡在哪裡 之前是ListBox裡只有四項,run出來的好像沒錯 可是變成五項時,問題就出現了 不知是否可請前輩們幫我check一下呢? 非常謝謝~
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-09-15 21:38:34 IP:140.129.xxx.xxx 未訂閱
Sei 您好:    不好意思,我沒有去理解您程式的內容,而直接用我的方法去做,提供您參考。 有一個很簡單的方法,至少可以判斷排列的結果是否正確? class="code"> // str:要做排列的資料; k:要取出多少個來作排列; idx:目前處理的位置 // 例如: permutation('abc', 3, 1) => abc, acb, bac, bca, cab, cba procedure TForm1.permutation(str: string; k, idx : integer); var p, n : integer; ch : char; begin n := Length(str); if ( idx=k ) then begin for p:=idx to n do begin ch := str[k]; str[k] := str[p]; str[p] := ch; Memo1.Lines.Add( Copy(str, 1, k) ); end; end else for p:=idx to n do begin ch := str[idx]; str[idx] := str[p]; str[p] := ch; permutation(str, k, idx 1); end; end; procedure TForm1.Button2Click(Sender: TObject); var number, perm, msg : string; k, p, idx : integer; begin number := '0123456789'; Memo1.Lines.Clear; perm := Copy(number, 1, lsb_DIG.Items.Count); // 決定多少個需要排序 permutation(perm, lsb_DIG.Items.Count, 1); // 取得所有的排列,暫存於Memo1中 for k:=0 to Memo1.Lines.Count-1 do // 依序取出可能排列,並將對應的結果show出 begin perm := Memo1.Lines.Strings[k]; msg := ''; for p:=1 to Length(perm) do begin idx := ord(perm[p]) - ord('0'); msg := msg ' ' lsb_DIG.Items.Strings[idx]; end; Memo4.Lines.Add(msg); end; end; RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-09-15 21:43:13 IP:211.20.xxx.xxx 未訂閱
Sei 你好     無法了解你真正的需求,以下提供幾個連結給你參考吧!    【Delphi】【問題】字串排列  http://delphi.ktop.com.tw/topic.php?topic_id=51370 【問題】如何產生配對  http://delphi.ktop.com.tw/topic.php?topic_id=46754 【問題】請教如何將陣列做排列組合  http://delphi.ktop.com.tw/topic.php?topic_id=46217 【Delphi】【問題】請問這個問題該如何解比較好呢? (排列組合的問題) http://delphi.ktop.com.tw/topic.php?topic_id=45540    _______________________________________ 深藍的魚,祝您好運..........連連
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-09-16 02:02:51 IP:221.169.xxx.xxx 未訂閱
Sei:
先找到妳原程式裡的
      DIG_String := '';
      for k := 0 to lsb_DIG_count-1 do
      begin
        DIG_String := DIG_String   lsb_DIG.Items[k]   ' ';
      end;
      Memo4.Lines.Add(DIG_String);
      before_ItemIndex := lsb_DIG.ItemIndex;
      SpeedButton2.OnClick(Self);
      after_ItemIndex := lsb_DIG.ItemIndex;
注意紅字部分改成
      DIG_String := '';
      before_ItemIndex := lsb_DIG.ItemIndex;
      SpeedButton2.OnClick(Self);
      for k := 0 to lsb_DIG.count-1 do //lsb_DIG_count改成lsb_DIG.count 
      begin
        DIG_String := DIG_String   lsb_DIG.Items[k]   ' ';
      end;
      Memo4.Lines.Add(DIG_String);
      after_ItemIndex := lsb_DIG.ItemIndex;
看看是不是妳要的!
請參考!
如果沒錯表示妳數學還是不錯的,只是放錯位置而已!
Andy Chang
------
Andy Chang
Sei
一般會員


發表:22
回覆:38
積分:17
註冊:2002-05-22

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-09-16 09:52:14 IP:61.221.xxx.xxx 未訂閱
感謝各位前輩花時間回覆與解答,也非常抱歉沒有講清楚我需求 是這樣的,我的需求是像 123 132 312 321 231 213 將所有數的排列組合對上,也就是3*2*1,6個結果 之前我寫過的程式在4個數上可以24項完全找到,也符合排列 可是到5的時候,有求過120個、85個,都會重覆出現排列 實在不清楚像這樣的數學式如何找到規則並用程式呈現 richtop前輩就點出來了,謝謝 Chance36前輩裡的連結我在貼文之前就查過了 非常謝謝您的回覆 也非常andychang1690前輩幫我看過程式並為我指導 run出來是120個結果,可是裡面還是有重覆排列 非常謝謝您!!
系統時間:2024-11-23 3:23:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!