|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2005-07-23, 09:50 AM | #1 |
管理版主
|
數學問題實作(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 完成 所以比較少或慢回覆 論壇 還請見諒 |
送花文章: 2013,
|
2005-07-24, 02:18 AM | #3 (permalink) |
註冊會員
|
/*
* ------------------------------- * 排列組合的產生(字典順序) * * ------------------------------- */ #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"); } } |
送花文章: 623,
|
2005-07-27, 11:35 AM | #4 (permalink) |
管理版主
|
首先謝謝大家及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 在一兩天內就會釋出 |
送花文章: 2013,
|