![]() |
數學問題實作(n!)
想要做一個功能
比如有一組數字或字串 ABCD 或 1234 想得到(列印出)所有可能的組合 比如以上可得 24 種組合 ABCD ABDC ACBD ACDB .... 不知如何實作 (用c、basic...不拘,及 不考慮重複問題) 透過 google 找到 http://66.102.7.104/search?q=cache:3...-CN|lang_zh-TW 不過是沒看過的程式語言 (重點難以理解) 希望大家能幫幫忙 Thx~ 後敘: 因為近來一直想趕快把 個人的 4星彩模擬器 Beta 3 完成 所以比較少或慢回覆 論壇 還請見諒 |
第一個聯想到的是遞迴!!!
(泥參考的範例也是用遞迴實作,不過正如他說的遞迴控制的不好的話,可是問題一堆的!!) 不過小弟不太會用~~~偶先玩玩看先!!!(順便把偶的參考書拿出來偷瞄看看) 不過 mini 版主泥要的是列出 組合方式 ,不是組合總數 對吧! |
/*
* ------------------------------- * 排列組合的產生(字典順序) * * ------------------------------- */ #include <stdio.h> #define N 4 int p[N+1]; void perm(int); void main(void) { int i; for (i=1;i<=N;i++) /* 初始設定 */ p[i]=i; perm(1); } void perm(int i) { int j,k,t; if (i<N){ for (j=i;j<=N;j++){ t=p[j]; /* p[i]∼p[j]的向右移動 */ for (k=j;k>i;k--) p[k]=p[k-1]; p[i]=t; perm(i+1); /* 遞迴呼叫 */ for (k=i;k<j;k++) /* 將陣列排列還原成遞迴呼叫前的狀況 */ p[k]=p[k+1]; p[j]=t; } } else { for (j=1;j<=N;j++) /* 顯示排列組合 */ printf("%d ",p[j]); printf("\n"); } } |
首先謝謝大家及snoopy的解答
先收起來 再來是經過近兩個星期的分析(遞迴真是讓自己傷透腦) 自己的(VB)版本出來了 Private Function NumAssemble(ByVal NumberString As String, Optional ByVal strIndex As String) As String Dim i As Integer Dim L As Integer Dim NewNumberString As String Dim strTemp As String Dim strIndexNoChange As String L = Len(NumberString) If L = 1 Then NumAssemble = NumberString Else For i = 1 To L If i > 1 Then NewNumberString = Left(NumberString, i - 1) If i < L Then NewNumberString = NewNumberString + Mid(NumberString, i + 1) If i = 1 Then strIndexNoChange = strIndex strIndex = strIndexNoChange + Mid(NumberString, i, 1) strTemp = NumAssemble(NewNumberString, strIndex) If Len(NewNumberString) = 1 Then strTemp = strIndex + strTemp If InStr(1, NumAssembleText, strTemp) = 0 Then '排除重複的組合 NumAssembleText = NumAssembleText + strTemp + LEND End If End If Next i End If End Function 'NumAssembleText 為一個輸出顯示TextBox 'Call NumAssemble("12345"),其中 12345 可以任意更改不受限制1234、1234565343... '其中有排除重複的功能所以 12344 不會是 5!=120種組合(而是 60種組合) '至於第一篇的URL 的語言原來是 Python (聽說 BT是用此開發的), '當初就是想要將那個範本改成VB,結果發現 Python 的一句VB要好多種判斷 '好在剛剛忽然開竅終於寫出來,所以 自己的 四星彩模擬器 Beta 3.0 在一兩天內就會釋出 |
所有時間均為台北時間。現在的時間是 10:29 AM。 |
Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2025, Jelsoft Enterprises Ltd.
『服務條款』
* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *