討論區快速選單
知識庫快速選單
下載Alexa Toolbar讓你上網更有趣 政府補助!學嵌入式+物聯網 最新Microsoft免費研討會行事曆
[ 回上頁 ] [ 討論區發言規則 ]
請教高手一個不太可能寫得出來的程式∼
更改我的閱讀文章字型大小
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/29 上午 06:47:06
X代表變數,從A到H共8個
OP代表運算元,+、-、*、/共4個
要達成按〔順序〕〔位數大小〕依次產生四則運算的題目(含括號)∼如:
一開始3位數處理:
A+A、A-B、A*B、A/C....H*H、H/H

第二次5位數處理:
A+A+A、A+A+B、A+A+C....H*H*A、H*H*B...

第三次7位數處理(開始含括號處理):
A+(A+A)、A+(A+B)、(A+A)+A......H+(H+G)、H+(H+H).....
處理位數3、5、7....可由使用者訂義上限

請問各位高手,以上用VB是否可做到,如何撰寫?煩請各位高手撥空指導撰寫方法,謝謝!
作者 : dorkas(aming) VC++優秀好手遊戲程式設計卓越專家DirectX頂尖高手C++優秀好手貼文超過2000則
[ 貼文 2625 | 人氣 4536 | 評價 11810 | 評價/貼文 4.5 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/29 上午 09:35:21
連高手都寫不出來的問題就別問了

我連題目都看不懂=.=a
作者 : w100(Jones) Visual Basic曠世奇才貼文超過500則
[ 貼文 927 | 人氣 906 | 評價 5860 | 評價/貼文 6.32 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/29 上午 11:04:42
VB當然做得到,要不然你們老師怎麼會出這個題目給你們做!
不過我看不懂題目!

作者 : 57805137(水瓶天賞) Visual Basic卓越專家貼文超過500則
[ 貼文 698 | 人氣 4505 | 評價 2720 | 評價/貼文 3.9 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/29 上午 11:10:04
取亂數而已,非高手問題,布用這樣來刺激我們
寫到這樣期他就自己在努力一下就可以
Private Sub Command1_Click()
Dim I As Integer
Dim tmpN As Integer
Dim ah(5) As Integer
Dim mid_S(10) As String
Dim ALL_STR As String

For I = 0 To 5 - 1 '''改變5這各變數 可以得報耕多位數的
''''取出 A-h
ah(I) = ((Rnd * 100) Mod 8)
'''取出 + - * /
tmpN = ((Rnd * 100) Mod 4) + 1
Select Case tmpN
Case 1
     mid_S(I) = "+"
Case 2
     mid_S(I) = "-"
Case 3
     mid_S(I) = "*"
Case 4
     mid_S(I) = "/"
End Select
ALL_STR = ALL_STR & Chr(65 + ah(I)) & mid_S(I)

Next I
Print Left(ALL_STR, Len(ALL_STR) - 1) 'Chr(65 + ah(0)) & mid_S & Chr(65 + ah2)
End Sub
作者 : bensontan(Benson) 貼文超過1000則人氣指數超過30000點
[ 貼文 1054 | 人氣 40462 | 評價 3290 | 評價/貼文 3.12 | 送出評價 80 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/29 下午 12:58:51
聽起來相當簡單,只是排列組合的小問題而已∼
問題是要花多久時間跑完?看起來是相當龐大

var gpVars = "ABCDEFGH"
var gpSgns = "+-"
var gpOprs = "+-*/"
var gpLPas = "("
var gpRPas = ")"

var needVars = 1
var needSgns = 2
var needOprs = 4
var needLPas = 8
var needRPas = 16

var nInitStatus = needVars | needSgns | needLPas

var status = nInitStatus

var nLeftPars = 0
var bEndable = true

var length = <input>

getFormula("", status, length)

function getFormula(formula, theStatus)
{
    var candidates = ""
    var nextStatus= 0
    var depth = formula.length
    if (depth equ 0)
    {
     if ((nLeftPars equ 0) and (bEndable)) print formula /* else skip */
    }
    else
    {
     if (theStatus & needVars neq 0) {
     if (nLeftPars equ 0) bEndable = true
     nextStatus = needOprs
     if (nLeftPars > 0) nextStatus = nextStatus | needRPas

     foreach<char> ch in gpVars
     {
     getFormula(formula + ch, nextStatus)
     }
     }
     if (theStatus & needSgns neq 0) {
     if (bEndable) bEndable = false
     foreach<char> ch in gpSgns
     {
     getFormula(formula + ch, needVars)
     }
     }
     if (theStatus & needOprs neq 0) {
     if (bEndable) bEndable = false
     nextStatus = needVars | needLPas
    
     foreach<char> ch in gpOprs
     {
     getFormula(formula + ch, nextStatus)
     }
     }
     if (theStatus & needLPas neq 0) {
     if (bEndable) bEndable = false
     nextStatus = needVars | needSgns | needLPas
     nLeftPars = nLeftPars + 1

     foreach<char> ch in gpOprs
     {
     getFormula(formula + ch, nextStatus)
     }

     nLeftPars = nLeftPars - 1
     }
     if ((theStatus & needRPas neq 0) and (nLeftPars > 0)) {
     nextStatus = needOprs
     nLeftPars = nLeftPars - 1
     if (nLeftPars equ 0) bEndable = true

     foreach<char> ch in gpOprs
     {
     getFormula(formula + ch, nextStatus)
     }

     nLeftPars = nLeftPars + 1
     }
    }
}
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/29 下午 03:12:50
不好意思,說清楚點,就是X代表變數(ABCDEFGH...),op代運算元(+-*/...)
題目最主要目的,是要列出變數搭配運算元之種種排列組合∼

例如:使用者輸入X變數範圍三個A、B、C,OP運算元四個+-*X,求至一∼七位的各種排列組合
如:三位的排列組合是(不可能含括號)
A+A(含運算元共三位)、A+B、A+C
B+A、B+B、B+C
C+A、C+B、C+C
....
五位的排列組合是(不可能含括號)
A+A+A、A+A+B、A+A+C.....A+B+A、A+B+B、A+B+C......

七位的排列組合是(可以含括號從七位開始)
A+(A+A)(含運算元及括號共七位、A+(A+B)、A+(A+C).....

就是要求以上如此,題目要求,可由使用者輸入X之範圍(A..Z)及運算元OP之範圍(+-X/...)及所要處理之位數3、5、7、9....
最後程式列出所有排列組合,就是如此∼

PS:出題者說這個題目,他花了近三年時間研究撰寫成功,編譯後程式執行檔約2~3MB

作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/29 下午 03:19:05
TO:57805137(水瓶天賞) 大大
感謝你的回覆,你是隨機產生的,可以寫得出來∼
題目確要求〔各排列組合情況〕〔須按順序〕∼
就是〔須按順序〕這個條件,我花了一、二個月還是想不出來、寫不出來,認為是不可能的
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/29 下午 03:23:37
感謝 bensontan(Benson)大大回覆∼
請問大大您那個是VC語言嗎?有沒有VB6的寫法?
VC我看不太懂,我想直接套到VB6裡RUN看看...
還是VB6做不到這樣的題目要求
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/29 下午 03:47:02
對不起!各位,再補充完整一點∼
題目要求的排列組是要符合〔四則運算式〕、〔按順序排列組合〕、〔含括號處理〕
以四則運算式來說,運算元加變數,長度一定是奇數位3、5、7...
如:最小3位為A+A、五位為A+A+A、七位為A+(A+A)
不可能是偶數位,如:A+、AB(不能省略不顯示運算元)AB....
作者 : bensontan(Benson) 貼文超過1000則人氣指數超過30000點
[ 貼文 1054 | 人氣 40462 | 評價 3290 | 評價/貼文 3.12 | 送出評價 80 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/29 下午 09:25:00
偶是寫語意, 不是用C 語言或任何一特定程式語言~
當然 VB 也可以做! 希望你在瞭解偶的語意後, 自己用 VB 去寫~
偶的語意已經能達到你要做的~ 即使你有需要延伸, 在這語意所訂的架構下,
應該也很容易達成~
最後, 還是重覆所寫的, 就複雜度來說, 這是 NP 問題~ 而且是 N^k, 所以會執行
很久~

PS: 如果語意不懂的可以問~
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/29 下午 09:53:32
再次感謝bensontan(Benson) 大大回覆:
語意不懂可以問,但,不是我不問,是幾乎看不懂你程式裡用的指令單字用途、指令和變數分不清,除了最前面的變數可以看懂,之後從var nInitStatus = needVars | needSgns | needLPas....就全看不懂了∼
真的要問,我得要逐行問∼^^!!!

另外這個程式,不會執行很久,出題者有run給我看過,如同寫99乘法表程式執行一樣∼
他run編譯過的程式給我測,我輸入變數範圍A、B、C,運算元範圍+-*X,處理位數3∼7
一下子就按順列出所有不重複的排列組合,如:A+A、A+B、A+C、B+A、B+B....

出題者說,這題目大多數人都看似簡單,但∼寫得出來的廖廖無寂....用任何程式語言都一樣,因為多了括號處理,困難度增加很多...@.@
作者 : 168(阿戊) Visual Basic一代宗師貼文超過2000則
[ 貼文 2957 | 人氣 7614 | 評價 11710 | 評價/貼文 3.96 | 送出評價 99 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/29 下午 11:32:33
'(...出題者太那格了吧...)
'以下程式碼有同樣的效果,但可能因為太簡單就解開而不是 出題者 或 泥 要的....

'在表單放置 Lable1(0-7)陣列: .caption="A=","B=","C="...,"H="
'Text1(0-7)陣列: .text 初始為0 ,各變數值請自設
'Text2 : .Text="" ,在這輸入運算式
'command1 : .caption="開始" ,執行審核/結果
'設定引用元件: Microsoft Script Control 1.0 → ScriptControl1

Private Sub Command1_Click()
 For i = 0 To 7
  If IsNumeric(Text1(i).Text) = False Then MsgBox "指定的值非數值!": Exit Sub Else Text1(i).Text = Val(Text1(i).Text)
 Next i
 
 q = "AaBbCcDdEeFfGgHh+-*/()"
 f = False
 For i = 1 To Trim(Len(Text2.Text))
  If InStr(1, q, Mid(Text2.Text, i, 1)) = 0 Then f = True: Exit For
 Next i
 If (f = True And (i > Len(q) Or w = 0)) Or (Len(Trim(Text2.Text)) Mod 2 <> 1 Or Len(Trim(Text2.Text)) < 1) Then MsgBox "運算式錯誤!": Exit Sub

 For i = 0 To 7: ScriptControl1.ExecuteStatement Chr(65 + i) & "=" & Val(Text1(i).Text): Next i '代入A-H的值
 ScriptControl1.ExecuteStatement ("ans=" & ScriptControl1.Eval(Text2.Text)) '執行運算
 MsgBox "ans=" & ScriptControl1.Eval("ans") '秀出結果
End Sub
作者 : 168(阿戊) Visual Basic一代宗師貼文超過2000則
[ 貼文 2957 | 人氣 7614 | 評價 11710 | 評價/貼文 3.96 | 送出評價 99 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/29 下午 11:35:45
歹勢...(這篇只為了 挪一下討人厭的廣告...>.<")
作者 : bensontan(Benson) 貼文超過1000則人氣指數超過30000點
[ 貼文 1054 | 人氣 40462 | 評價 3290 | 評價/貼文 3.12 | 送出評價 80 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/30 上午 03:00:36
1. "|" 是 bitwise or. 如: 2|3 => 3
2. "&" 是 bitwise and. 如: 2&3 => 2
3. if (a equ 0) 是 判斷 a 是否為 0
4. if (a neq 0) 是 判斷 a 是否不是 0
5. <input> 就是輸入進來就對了,
大約像: Input "Please input the formula length", length

6. foreach<char> ch in gpVars {...} 是指對每一個在字串裡的字元, 大約是像這樣
for i=0 to len(gpVars)
   ch = mid(gpVars, i, 1)
...
next

7. if (nLeftPars equ 0) bEndable = true 大約要改成
IF nLeftPars = 0 Then bEnable=1

9. if (theStatus & needSgns neq 0) { ... } 大約要改成
IF theStatus and needSgn <> 0 THEN
....
END IF

這樣應該夠了吧, 如果不懂再問, 你想想偶們是會的, 而你是不會的, 本來就應加把
勁去搞懂, 搞懂對你有好處, 對偶們則沒什麼用處, 要搞懂最基本的就是從"問"開始,
有人教已經很好了, 不像偶當初得要自己摸索~
作者 : bensontan(Benson) 貼文超過1000則人氣指數超過30000點
[ 貼文 1054 | 人氣 40462 | 評價 3290 | 評價/貼文 3.12 | 送出評價 80 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/30 上午 03:10:25
你朋友的例子可能也是錯的, 舉例來說:
(A), +(-B), (((A)))

基本上, 運算元要與符號分開, 而括號必須能多層~

PS: 這類問題不用高手就可以解決, 而聽你所述來看, 只能說你朋友也不是高手~
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/30 上午 11:33:09
多謝bensontan(Benson)回覆~
但∼你舉例的(A), +(-B), (((A)))是什麼意思?
(A),+(-B)....這些並不能算是或符合(四則運算式)的表現?

出題者的程式,從第七位開始,處理括號,所列出的排列組合情況如下:
以最簡單的1.變數輸入2個A、B,2.運算元就輸入+,直接求七位長度的四則運算排列組合:(按順序)
A+(A+A)、A+(A+B)、A+(B+A)、A+(B+B)、B+(A+A)、B+(A+B)、B+(B+B)
(A+A)+A、(A+B)+A......
顯示大概就是如此,即符合〔四則運算式),又可代入數字求值∼
程式就是要達到如此,就如同九九乘法表,列出1∼9的排列組合

(A)、+(-B)、((A))...這些代入數字,還是等於原數或變正負而已,沒意義....
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/30 上午 11:56:54
感謝168(阿戊) 的回覆指教∼
但∼您提供的程式,好像純為代入數字,解四則運算式的答案∼
這程式我寫過,就算輸入含有多層刮號的四則運算式,程式也可照解不誤∼

但∼如今出題者的題目,是要像九九乘法表一樣列出1∼9按順序的種種排列組合情況∼
只是題目由1~9數字,改成A~Z及運算元+-*/...等,列出最少三位到最大位數之種種,按順序之排列組合狀況∼

不是要解數字代入四則運算式求得結果∼^^!!!
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/30 下午 12:26:19
TO:bensontan(Benson)大大~
不好意思,剛稍為研究了一下,還是粉難看懂...
小弟才疏學淺,只會VB6,你用的程式語言我沒學過....
要繼續邊研究邊詢問的話,可能要好幾篇回覆文...^^!!!
即然是語意,能否用流程圖或文字敍述式的流程表達,這樣子,可能較好看懂∼
如:九九乘法表∼
  1.使用者輸入X處理數字範圍最大3、輸入每層最大Y只求到5(即1*1=1......1*5=5)
  2.使用二個迴圈,第一層回圈由1到最大X(即使用者輸入3)
     3.第二層迴圈,由1到Y(即使用者輸入5)
  .........
像這樣文字式的流程描述語意,我就可以大概套用撰寫看看....^^!!!
作者 : dorkas(aming) VC++優秀好手遊戲程式設計卓越專家DirectX頂尖高手C++優秀好手貼文超過2000則
[ 貼文 2625 | 人氣 4536 | 評價 11810 | 評價/貼文 4.5 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/30 下午 01:53:55
題目只是要窮舉法 列出所有可能的組合
不過括號的要求有矛盾點..不符合數學的定義,邏輯上也有衝突

建議可以用後置式的分析樹去解
結點為OP + - * /
子葉為 A B C D E F G
配合遞迴

應該不用寫三年=.=a

作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/30 下午 03:52:42
感謝dorkas(aming)大大回覆∼
我也是覺得不用寫三年∼但...就是想不出怎麼寫、寫不出來丫....^^!!!

(括號的要求有矛盾點..不符合數學的定義,邏輯上也有衝突)????
還好吧,那裡不符合、邏輯衝突?
不過就是把各排列組合情況列出罷了∼
想想∼如果是人工用寫出各種四則運算式排列組合情況,多麻煩∼
交給電腦像列出九九乘法表那樣,多快丫∼
作者 : bensontan(Benson) 貼文超過1000則人氣指數超過30000點
[ 貼文 1054 | 人氣 40462 | 評價 3290 | 評價/貼文 3.12 | 送出評價 80 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/30 下午 07:57:57
A*((B)), -A+(-B) -> 這都是四則運算吧~

將 ABCDEFGH 設為第一個 group (變數類)
var gpVars = "ABCDEFGH"

'將 "+-" 設為第二個 group (符號類)
var gpSgns = "+-"

'將 "+-*/" 設為第三個 group (運算類)
var gpOprs = "+-*/"

'將 "(" 設為第四個 group (左括號類)
var gpLPas = "("

'將 ")" 設為第五個 group (右括號類)
var gpRPas = ")"


'用2^0, 2^1, 2^2, 2^3, 2^4 來表示是否取以上五類的開關
var needVars = 1
var needSgns = 2
var needOprs = 4
var needLPas = 8
var needRPas = 16

'設定初始可以是 變數, 符號 和 左括號類
var nInitStatus = 11 'needVars | needSgns | needLPas

'設定目前狀態為初始狀態
var status = nInitStatus

'設定目前括號層數為0
var nLeftPars = 0

'設定"是"可以結束, (如: 當運算式為 "(", 則不可結束)
var bEndable = 1

'''''''

'輸入運算式長度
Input "Please input the length", length

'若長度小於7, 不支援括號
IF length < 7 THEN
  needLPas = 0
  needRPas = 0
END IF

'開始利用遞迴找出所有的運算式
getFormula("", status)

' getFormula
' - 利用遞迴印出所有的運算式排列組合
' parameters:
' formula : 運算式字串
' theStatus : 目前運算式可接的種類狀態
function getFormula(formula, theStatus)
{
    '用來預備存下一個狀態
    var nextStatus= 0

    '用來存狀態 bitwise and的值
    var temp = 0

    '公式目前的長度
    var depth = formula.length

    '記錄取字串的位置
    var pos

    '記錄字串取出的字元
    var ch

    '如果目前長度等於指定長度並且可以結束, 則印出運算式
    IF depth = length THEN
     IF nLeftPars = 0 AND bEnable = 1 THEN
     PRINT formula
     END IF
    ELSE
     '若目前可以加變數類
     temp = theStatus AND needVars
     IF temp <> 0 THEN
     '若目前括號層數為0, 則加變數類後, 是可以結束的
     IF nLeftPars = 0 THEN
     bEndable = 1
     END IF
     '變數後下一個可以加的是運算式
     nextStatus = needOprs

     '若有左括弧,則可以加右括弧類, 如: (A的情況可以是 (A+ or (A)
     IF nLeftPars > 0 THEN
     nextStatus = nextStatus OR needRPas
     END IF

     '對每一個字元, 取出放入 FORMULA, 然後遞迴呼叫
     FOR pos = 1 TO LEN(gpVars)
     ch = MID(gpVars, pos, 1)
     getFormula(formula + ch, nextStatus)
     NEXT
     END IF

     '若目前可以加符號類
     temp = theStatus AND needSgns
     IF temp <> 0 THEN
     '因為是符號, 所以不可以結束
     IF bEndable = 1 THEN bEndable = 0
     '遞迴呼叫下一個字元 (必定是變數)
     FOR pos = 1 TO LEN(gpSgns)
     ch = MID(gpSgns, pos, 1)
     getFormula(formula + ch, needVars)
     NEXT
     END IF

     '若目前可以加運算類
     temp = theStatus AND needOprs
     IF temp <> 0 THEN
     '因為是運算, 所以不可以結束
     IF bEndable = 1 THEN bEndable = 0
     '運算元後可以加變數或左括號類
     nextStatus = needVars | needLPas
    
     '遞迴呼叫下一個字元 (必定是變數)
     FOR pos = 1 TO LEN(gpOprs)
     ch = MID(gpOprs, pos, 1)
     getFormula(formula + ch, needVars)
     NEXT
     END IF

... 剩下的應該可以自己完成~
作者 : dorkas(aming) VC++優秀好手遊戲程式設計卓越專家DirectX頂尖高手C++優秀好手貼文超過2000則
[ 貼文 2625 | 人氣 4536 | 評價 11810 | 評價/貼文 4.5 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/30 下午 09:17:03
第二次5位數處理:
A+A+A、A+A+B、A+A+C....H*H*A、H*H*B...

第三次7位數處理(開始含括號處理):
A+(A+A)、A+(A+B)、(A+A)+A......H+(H+G)、H+(H+H).....

因為 5跟7 在處理上可以說是一樣的 但是偏偏擠個左右括號來當成位數?
數學上括號代表是優先順序...怎能稱做位數???

使得程式解法要遷就問題寫出dirt演算法....明明可以用同一個pattern解

  +
A +
   A A
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/30 下午 10:14:45
感謝dorkas(aming)大大回覆~
在〔各排列組合〕情況中,會有〔相似〕情況是必然的∼
如同九九乘法表中的1*3=3跟3*1=1是差不多意思,但∼位置不同∼

但∼5位跟7位不見得都是如此∼
如:A+A*A與(A+A)*A,就必需遵守四則運算規則刮號內先處理、先乘除後加減...
所以刮號也是四則運算式中位數之一

PS:我要再次去研究bensontan(Benson) 大大程式....^^!!!
作者 : dorkas(aming) VC++優秀好手遊戲程式設計卓越專家DirectX頂尖高手C++優秀好手貼文超過2000則
[ 貼文 2625 | 人氣 4536 | 評價 11810 | 評價/貼文 4.5 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/30 下午 10:41:08

1. A+A*A
  +
A *
   A A

=(A+(A*A))=A+(A*A)=A+A*A

2.(A+A)*A
    *
  + A
A A

=((A+A)*A)=(A+A)*A

作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/30 下午 10:59:35
再次感謝dorkas(aming) 回覆∼^^
但∼不知大大所要表達是什麼?如果只是要說明都是A,A=1是,都一樣的話,那我同意∼
程式目的是要〔各排列組合情況〕,我舉A+A*A與(A+A)*A∼
只是要說明四則運算式中的刮號內優先處理、再∼先乘除後加減規則∼
如果使用者輸入變數範圍是A、B,運算元是+-*,求3至7位的各排列組合情況∼
那其中勢必會有∼(A+B)*A)與A+B*A,那這樣變數搭配排列組合就會所有不同了∼
如果題目又要要求去除相似雷同的,那就又更難了∼

另((A+A)*A)這樣的東西,就正常四則運算式來說,不應該出現
因為最外圍的刮號,有或無皆沒意義∼除非前後又多加A+、+A之類的

繼續研究bensontan(Benson) 大大程式.....^^!!!
作者 : dorkas(aming) VC++優秀好手遊戲程式設計卓越專家DirectX頂尖高手C++優秀好手貼文超過2000則
[ 貼文 2625 | 人氣 4536 | 評價 11810 | 評價/貼文 4.5 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/1 上午 09:17:39
我種了兩棵樹 你沒看出來嗎?
可以輕易解決括號 跟無限項的問題........
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/1 下午 01:29:05
感謝dorkas(aming) 大大回覆指教∼
恕小弟不才,完全看不出,解決刮號、無限項的程式碼寫法?^^!!!
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/1 下午 03:01:26
感謝bensontan(Benson) 大大不辭辛勞指導∼
惟∼小弟不才,花了一段時間,按您的程式敍述,轉成vb的語法∼
最後執行輸入長度3,結果好像是無窮迴圈(遞回)不會結束∼^^!!!

有幾處不明白,如下
'設定初始可以是 變數, 符號 和 左括號類
var nInitStatus = 11 'needVars | needSgns | needLPas
......
一開始這邊用nInitStatus = 11 (1+2+8)表示其值∼
這種數字加總用來決定處理的方法,有點類似LINUX下的檔案權限用數字設定的方法∼

但,接下來....
'若目前可以加變數類
temp = theStatus AND needVars
IF temp <> 0 THEN
......
'若目前可以加符號類
temp = theStatus AND needSgns
IF temp <> 0 THEN
....

這個 temp =theStatus AND needVars,實在不知如何於VB6中正確表達其意思及目的?
我是沒修改,直接原封不動,用於VB6中執行....
但∼結果程式如一開始所言,無窮回圈(遞回)沒結束∼=.=!!!

作者 : jevoswang(jevos wang) 貼文超過200則
[ 貼文 379 | 人氣 3351 | 評價 880 | 評價/貼文 2.32 | 送出評價 4 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/1 下午 03:20:13
我看你先去把基本的 vb 範例跑一跑再來做這個題目吧
基本概念,基本語本,基本..........

請把基本的弄清楚吧
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/1 下午 04:06:19
感謝jevoswang(jevos wang) 大大的回覆∼
基本的我都會丫∼
隨機產生四則運算式∼
解多重刮號四則運算答案,如:(2+1)*8+(2+2(6*5))∼
英文單字輔助記憶(含TTS發音模組、自動產生音標模組)∼
我都自己會寫丫...

就這個〔按順序〕〔含刮號〕〔符合正常四則運算式表態〕〔動態定義範圍〕條件的四則運算式排列組合情況產生程式,寫不出來丫~^^!!!
作者 : dorkas(aming) VC++優秀好手遊戲程式設計卓越專家DirectX頂尖高手C++優秀好手貼文超過2000則
[ 貼文 2625 | 人氣 4536 | 評價 11810 | 評價/貼文 4.5 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/1 下午 04:17:48
去買一本資料結構與演算法的書來啃吧
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/1 下午 04:32:03
感謝dorkas(aming)回覆指教∼
剛線上問出題者,他說不用〔資料結構與演算法〕知識,因為他也沒看過、也不太懂那個∼
他說如同我寫∼解輸入多層刮號運算式答案程式一樣,重點在於抓住〔規則〕即可∼
但∼難度是比那稍難一點,所以,他才花了那麼久的時間寫出來∼=.=!!!
作者 : bensontan(Benson) 貼文超過1000則人氣指數超過30000點
[ 貼文 1054 | 人氣 40462 | 評價 3290 | 評價/貼文 3.12 | 送出評價 80 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/1 下午 05:02:32
> 這個 temp =theStatus AND needVars,實...如一開始所言,無窮回圈(遞回)沒結束∼=.=!!!

解法不會可以問,語法不會則欠翻書∼若不熟VB6, 你可以用你其他熟的電腦
語言去解,如果 VB6也夠熟,那只剩下程式除錯,花點時間就應該可以出來∼

想想,從我 post 解法上來,已經過了幾天,這中間,偶已經解出猜數字遊戲最多
只要7次(http://brainden.com/forum/viewtopic.php?f=7&t=561&hilit=),
上班完成所需的工作,以及回覆其他幾篇版上別人的問題∼

講這些不是炫耀,只是要告訴你,自己要多加油、要多努力,天下沒有白吃的午餐,
偶們花一小時,你應當要花至少七倍以上的時間去摸索、去嘗試,不然能力的差距只
會越來越懸殊∼

最後,老話一句,想想偶當初學的時候別人都保留不願意教,你已經很幸福,所以更
應多努力∼把問題彙整出來問吧∼
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/1 下午 05:36:34
再次bensontan(Benson) 回覆∼
您最後所說,跟出題者對我說的雷同∼^^!!!
他說∼〔靠自己吧∼這題目前沒什麼人可以完全抓住規則、寫得出∼
網路上各論壇詢問,大都也是片面之詞,或指示方向、該看什麼書....
我也曾在網路上PO題目,大部分都只是回說∼看起來粉簡單丫....
實際上最後都不了了之文章下沈∼沒完整或接近完整的答案...〕

所以,看來想要找到完整答案,不太可能,我還是先自己研究好了∼
感謝各位連日來的回覆、教導∼^^

作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/1 下午 05:36:40
再次bensontan(Benson) 回覆∼
您最後所說,跟出題者對我說的雷同∼^^!!!
他說∼〔靠自己吧∼這題目前沒什麼人可以完全抓住規則、寫得出∼
網路上各論壇詢問,大都也是片面之詞,或指示方向、該看什麼書....
我也曾在網路上PO題目,大部分都只是回說∼看起來粉簡單丫....
實際上最後都不了了之文章下沈∼沒完整或接近完整的答案...〕

所以,看來想要找到完整答案,不太可能,我還是先自己研究好了∼
感謝各位連日來的回覆、教導∼^^

作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/1 下午 05:36:44
再次bensontan(Benson) 回覆∼
您最後所說,跟出題者對我說的雷同∼^^!!!
他說∼〔靠自己吧∼這題目前沒什麼人可以完全抓住規則、寫得出∼
網路上各論壇詢問,大都也是片面之詞,或指示方向、該看什麼書....
我也曾在網路上PO題目,大部分都只是回說∼看起來粉簡單丫....
實際上最後都不了了之文章下沈∼沒完整或接近完整的答案...〕

所以,看來想要找到完整答案,不太可能,我還是先自己研究好了∼
感謝各位連日來的回覆、教導∼^^

作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/1 下午 09:12:24
不好意思∼不知怎麼點按,連貼三章一樣的回應內容∼

TO:bensontan(Benson) 大大∼
晚上進修上課,把你的提供的程式語法及題目規則,給老師看看,協請指導∼
老師回覆:
按題目規則來說,按這個程式語法,是不能成功的∼
且∼這個題目規則太刁鑽了,連老師∼我,都不見得寫得出來∼
這個參考的程式,第第二個 group (符號類)+-可以拿掉∼
因為以ABC...變數來呈現的四則運算,不需要,於實際用數字代入變數運算時,用於數子.....(講了一堆...)

老師給了個方向及提示試試∼說:
可以從變數的數量及運算子的數量,掌握每階層執行次數3個ABC變數,就有3*3=9次的排列組合變化,刮號較麻煩需........

所以,bensontan(Benson) 大大,還是謝謝你提供的程式語法指導方向∼
但∼我還是放棄您提供的非VB6的程式片段語法,改朝老師所給的提示去努力做研究∼^^
作者 : 168(阿戊) Visual Basic一代宗師貼文超過2000則
[ 貼文 2957 | 人氣 7614 | 評價 11710 | 評價/貼文 3.96 | 送出評價 99 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/1 下午 09:58:03
再次歹勢...阿戊仍不素來po完整解答滴~>.<"
一般的窮舉法真的在實務上相信一定是大家最不想解的(因為心想....如果偶的方法不管泥用那種都可以解,那偶何必把每種都幫泥列出來...又不是閒的發慌...:p 當然 '被考' 又另當別論啦....)
題目如果拆成兩部份...變數窮舉ok了,而加刮號的窮舉就是原運算式長度減二的倍數再延列...不要全混在一起想...就沒那麼難啦~(如果依其題意...自然就是要長度3以上才符合它滴"要符合運算規則"...既然泥想柱已 '參透' 了,參考看看嚕~ ^+++^)
作者 : bensontan(Benson) 貼文超過1000則人氣指數超過30000點
[ 貼文 1054 | 人氣 40462 | 評價 3290 | 評價/貼文 3.12 | 送出評價 80 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/1 下午 10:29:39
雖然一個利用遞迴去找所有排列組合的程式架構被當做"不能成功"的,
對於偶來說還是激起心中漣漪,但想想自己只是回國貢獻,要學會放下∼
只能對入寶山空手而回的過客,希望他好自為之∼

如果你寫過一萬行以上的程式,而寫的系統提供一萬人以上使用,再讓人評論
是不是高手,自己沒有這種能力、做不出來,不要當別人也做不出來∼

PS:加個篩選的就可以把可簡化的去除掉
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/2 下午 03:18:33
再次感謝168(阿戊)及bensontan(Benson) 不厭其煩的回覆指教~
如同168(阿戊)大大所言,含刮號處理真的較麻煩∼^^!!!
目前本人按老師的提示方向∼n個變數、n個運算子、n個長度,有n*n*n個變化組合量∼
寫出不含刮號按順序、符合四則運算式的排列組合,後續要專研刮號規則....

致於bensontan(Benson)大大所提供的程式語法,可能是小弟不才∼
所以,無法吸收您的程式語言加以運用...^^!!!
因為小弟只會VB6,在VB討論區發問,也是希望得到VB方面的解答...

致於會不會寫這個程式,是不是等於就是高手,不重要,當初標題含[高手〕二字∼
純是吸引各位觀看,幫小弟解答,不好意思∼^^!!!

世上沒有一定的∼高手,所謂,術業有專攻麻!
就像出題者,說他想不出我的單字輔助記憶程式中的音標自然產生模組如何寫?
(音標產生模組,不建立任何單字、音標資料庫,純根據單字產生對應KK音標)

會想專研這個四則運算產生程式,主要是因為出題者說,這程式如果寫得出來∼
配合代入數字解答的程式,會幫你賺錢@.@
但∼他說要我寫出來後,再告訴我如何應用於生財之道∼=.=!!!
作者 : morphingman(morphingman)
[ 貼文 102 | 人氣 448 | 評價 150 | 評價/貼文 1.47 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/2 下午 06:35:52


聽過 Mathworks matlab, 及 Mathematica 嗎
請教五個問題 (因為我看不懂題目)
(0) 你的題目當有九個時 答案有幾種組合 (不管內容)
(1) 什麼是 binary expression 及 unary expression?
(2) x1+x2+x3+x4+x5+x6+x7 = 167 (foreach xi 是整數, xi >=0)有幾種組合?
(3) 什麼是 dynamic programming
(4) 什麼是 BNF, LR(1)

你的問題和這些有關

作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/2 下午 08:04:52
感謝morphingman(morphingman) 回覆~
小弟也看不太懂你問的東西?
當題目有 九個?指是九個變數a~h、還是九種運算子+-*/....、還是長度9?
小弟再表達一次題目用意~
就是如同九九乘法表一般,按順序大小列出1~9的種種排列組合情況∼
只是題目改成變數A~Z變數,加上運算子+-*/及處理長度(三者都是動態範圍,由使用者輸入)
最後按順序、符合正常四則運算式表態、含刮號處理之種種排列組合情況....
直接舉含刮號的列子(含刮號的寫得出來,那不含刮號的,就不在話下囉)
1.使用者輸入變數A、B兩個
2.輸入運算子+、*兩個
3.希望顯示七位的長度的四則運算式的種種排列組合∼
顯示大約如下:
A+A+A+A(七個字所以是七位)、A+A+A+B....A+(A*B).....(A+A)*B.......
B+A+A+A、B+A+A+B......
就是將子,運算式子長度越長,面臨的刮號變化就越雜∼
如:(A+(A+A)+A)+A、(A+B)*(B+A)、(((A+B)*A)+A)*B....諸如此類的排列組合

以下則是不符合正常運算式表態、或無意義的呈現∼
((A))->多一層沒意義刮號、+(A)->變數呈現時,沒正、負問題,正負問題是將正、負數字代入變數時才有,所以這個也是沒意義的呈現∼
當初我寫隨機產生四則運算式時,會產生一堆沒意義的式子...=.=!!!

就是如此∼夠明白了吧∼^^
作者 : akasan(akasan)
[ 貼文 147 | 人氣 1174 | 評價 470 | 評價/貼文 3.2 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/2 下午 08:19:23
我是從頭看到尾的路人...

這是你在頂樓寫的部分:
第三次7位數處理(開始含括號處理):
A+(A+A)、A+(A+B)、(A+A)+A......H+(H+G)、H+(H+H).....


這是你在樓上那篇寫的部分:

>3.希望顯示七位的長度的四則運算式的種種排列組合∼
>顯示大約如下:
>A+A+A+A(七個字所以是七位)、A+A+A+B....A+(A*B).....(A+A)*B.......
>B+A+A+A、B+A+A+B......
顯然是你後來寫的這個合理多了...

阿你頂樓寫的是來給人猜謎的嗎XD...
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/2 下午 08:47:13
感謝akasan(akasan) 回覆~
不好意思~一開始小弟心裡急於知道解法之道~
所以,想到什麼寫什麼~表達不是很好,於是中間幾次又穿插補充說明∼
這次是綜合說明,應該夠清楚了吧∼^^!!!
希望有朝一日,能見到這個∼看似簡單,又寫不太出來∼的完整程式∼
努力研究撰寫中....^^
作者 : dorkas(aming) VC++優秀好手遊戲程式設計卓越專家DirectX頂尖高手C++優秀好手貼文超過2000則
[ 貼文 2625 | 人氣 4536 | 評價 11810 | 評價/貼文 4.5 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/2 下午 08:52:01

>實際上最後都不了了之文章下沈∼沒完整或接近完整的答案...〕


標準答案根本不存在..完全看問題需求
程式設計首重內功心法,招式根本不重要..

歡迎來到程式設計的世界...

如果你只是想要現成的CODE, 可以去發包區發CASE
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/2 下午 09:03:15
感謝dorkas(aming) 回覆~
您的意思是我出錢請人寫?
不用吧∼自己研究自己寫就好了,何況小弟是窮家子弟,出不了萬把大鈔∼^^!!!
主要是自己想挑戰出題者出的這個題目∼
謝謝您的建議∼^^
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++曠世奇才新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4737 | 人氣 9172 | 評價 31150 | 評價/貼文 6.58 | 送出評價 138 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/2 下午 11:36:46
回樓主:

相當有趣的題目, 但沒有想像中的難. 一個 expression 可以把它分成運算子 (operator) 及運算元 (operand) 兩部份, 每個部份取出它的 combination, 然後再結合起來.

以運算元來說, 它的 combination 是從 "AAA" 到 "HHH". 你把 'A'~'H' 當作是一個 8 進位的「文字數值」來看就很容易做了. 從左邊的「個位數」開始做「增一」的動作, 當某個「位數」的值從 'H' 跳回 'A' 時, 就「進位」到下一個位數:

  百位  十位  個位
-------------
   A   A   A
   A   A   B
   ...
   A   A   H --+ 個位值從 'H' 回到 'A',
               | 十位值就「進位」
   A   B   A <-+
   A   B   B
   ...
   A   B   H
   A   C   A
   ...
   H   H   H
   A   A   A

當所有的位值都到了 "HHH" 時, 下一個「增一」導致每一個位數都進位, 結果就 overflow 回到 "AAA", 最初始的狀態. 當回到初始值時, 也就得到所有的組合了.

運算子的組合也是同樣的原理, 比方說三個運算元的 expression, 有兩個運算子. 假定運算子用這個 set { '+', '-', '*', '/' }, 那它的組合就是:

  十位  個位
---------
   +   +
   +   -
   +   *
   +   /
   -   +
   -   -
   -   *
   -   /
   ...
   /   /

如果用 C 或 C++ 語言來實做的話:
void GetNextCombination(const char chList[], char chCombination[], const int nCombinationSize)
{
  bool bCarry = true;
  for (int n = nCombinationSize - 1; bCarry && n >= 0; --n)
  {
    const char *p = strchr(chList, chCombination[n]);
    assert(p);
    if (!*++p)
    {
      p = chList;
    }
    else
    {
      bCarry = false;
    }
    chCombination[n] = *p;
  }
}

使用範例如下:

  char chOperand[] = "AAA";
  const int nOperand = strlen(chOperand);

  do
  {
    std::cout << chOperand << std::endl;
    GetNextCombination("ABCDEFGH", chOperand, nOperand);
  } while (strcmp(chOperand, "AAA"));


跟運算子結合, 就用兩個 loop:

    char chOperandList[] = "ABCDEFGH";
    char chOperatorList[] = "+-*/";

    char chOperand[] = "AAA";
    const int nOperand = strlen(chOperand);

    char chOperator[] = "++";
    const int nOperator = strlen(chOperator);
    do
    {
     do
     {
     PrintExpression(chOperand, nOperand, chOperator);
     GetNextCombination(chOperatorList, chOperator, nOperator);
     } while (strcmp(chOperator, "++"));
     GetNextCombination("ABCDEFGH", chOperand, nOperand);
    } while (strcmp(chOperand, "AAA"));

〔續...〕
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++曠世奇才新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4737 | 人氣 9172 | 評價 31150 | 評價/貼文 6.58 | 送出評價 138 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/2 下午 11:37:12
〔...續〕

PrintExpression() 應該不難理解:

void PrintExpression(const char chOperand[], int nOperand, const char chOperator[])
{
  for (int n = 0; n < nOperand - 1; ++n)
  {
    std::cout << chOperand[n] << " "
         << chOperator[n] << " ";
  }
  std::cout << chOperand[nOperand-1] << std::endl;
}


上面是不含括號的四則運算組合. 如果要加括號, 乍看之下似乎很複雜, 但實際上只需在 PrintExpression() 動手腳即可. 給個例子就容易看得出來了. 比方說原本的式子是:

  A + A + A + A

如果只限一層括號, 它所有的組合就是:

  (A + A) + A  + A
  (A + A  + A) + A
  (A + A  + A  + A)

   A + (A + A) + A
   A + (A + A  + A)

   A + A + (A + A)

左括號只能在這個範圍內移動: 從最左邊第一個運算元移至右邊最後第二個運算元.
右括號的移動範圍則是: 從左括號起的第二個運算元至最後一個運算元.

所以括號的打印, 完全可以在 PrintExpression() 裡進行, 下面的函式 PrintWithParen() 做的就是這個:

void PrintWithParen(const char chOperand[], int nOperand, const char chOperator[])
{
  for (int lParen = 0; lParen < nOperand-1; ++lParen)
  {
    for (int rParen = lParen+1; rParen < nOperand; ++rParen)
    {
      for (int n = 0; n < nOperand - 1; ++n)
      {
        if (lParen == n)
        {
          std::cout << "(";
        }
        std::cout << chOperand[n];
        if (rParen == n)
        {
          std::cout << ")";
        }
        std::cout << " " << chOperator[n] << " ";
      }
      std::cout << chOperand[nOperand-1];
      if (rParen == nOperand-1)
      {
        std::cout << ")" << std::endl;;
      }
      else
      {
        std::cout << std::endl;
      }
    }
  }
}

像這類的題目, 關鍵之處是要能夠找出它的 pattern. 只要找到 pattern, 很快就能寫出來了.

P.S.: 雖然你的問題是用 VB, 但我的 C++ 語言比 VB 熟, 所以上面的程式是用 C++ 來寫的. 只要了解了概念, 用什麼語言應該都不成問題.

作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++曠世奇才新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4737 | 人氣 9172 | 評價 31150 | 評價/貼文 6.58 | 送出評價 138 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/3 上午 02:29:29
這是我用 VB 2005 的試作 (不包括 「括號」的部份), 請 VB 高手指教. VB 用得很少, 見笑了.

Module ExpressionComination

    Sub GetNextCombination(ByVal strList As String, ByRef chCombination() As Char)
     Dim bCarry As Boolean = True
     For n As Integer = Len(chCombination) - 1 To 0 Step -1
     Dim nPos As Integer = InStr(strList, chCombination(n))
     If (nPos = Len(strList)) Then
     nPos = 1
     Else
     nPos = nPos + 1
     bCarry = False
     End If
     chCombination(n) = strList(nPos - 1)
     If (bCarry = False) Then
     Exit For
     End If
     Next
    End Sub

    Sub PrintExpression(ByVal chOperand() As Char, ByVal chOperator() As Char)
     For n As Integer = 0 To UBound(chOperand) - 1
     Console.Write(chOperand(n) & " " & chOperator(n) & " ")
     Next
     Console.WriteLine(chOperand(UBound(chOperand)))
    End Sub

    Sub PrintAllCombinations(ByVal strOperandList As String, ByVal strOperatorList As String, ByVal strOperandStart As String, ByVal strOperatorStart As String)
     Dim chOperand() As Char = strOperandStart.ToCharArray()
     Dim chOperator() As Char = strOperatorStart.ToCharArray()

     Do
     Do
     PrintExpression(chOperand, chOperator)
     GetNextCombination(strOperatorList, chOperator)
     Loop Until (chOperator = strOperatorStart.ToCharArray())
     GetNextCombination(strOperandList, chOperand)
     Loop Until (chOperand = strOperandStart.ToCharArray())
    End Sub


    Sub Main()
     PrintAllCombinations("ABCDEFGH", "+-*/", "AA", "+")
     PrintAllCombinations("ABCDEFGH", "+-*/", "AAA", "++")
    End Sub

End Module

作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++曠世奇才新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4737 | 人氣 9172 | 評價 31150 | 評價/貼文 6.58 | 送出評價 138 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/3 上午 02:32:54
>Module ExpressionComination

@@ 拼錯了, 應該是: ExpressionCombination 才對.

作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/3 上午 06:37:48
感謝sflam(Raymond) 大大熱情回覆~
不含刮號、按順序的小弟已ok~
但~如果如果含刮號的話,長度越長的四則運算式,其刮號變化就越多,〔層〕也不只一層∼
(A+(B+C)-H)*D、(A+B)*(B+C)、(((A+B)*C)+D)*B....諸如此類∼
已知範圍(靜態),可以在程式內按已知規則定好,但∼如果是按使用者輸入(動態)就無法如此∼
不知您有何妙法可解?@.@
作者 : dorkas(aming) VC++優秀好手遊戲程式設計卓越專家DirectX頂尖高手C++優秀好手貼文超過2000則
[ 貼文 2625 | 人氣 4536 | 評價 11810 | 評價/貼文 4.5 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/3 上午 09:27:54
老話一句 資料結構與演算法 2元樹

>(A+(B+C)-H)*D
     *
     - D
     + H
    A +
     B C


>、(A+B)*(B+C)

     *
  + +
A B B C


>(((A+B)*C+D)*B

     *
     + B
     * D
  + C
A B


作者 : dorkas(aming) VC++優秀好手遊戲程式設計卓越專家DirectX頂尖高手C++優秀好手貼文超過2000則
[ 貼文 2625 | 人氣 4536 | 評價 11810 | 評價/貼文 4.5 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/3 上午 09:28:01
老話一句 資料結構與演算法 2元樹

>(A+(B+C)-H)*D
     *
     - D
     + H
    A +
     B C


>、(A+B)*(B+C)

     *
  + +
A B B C


>(((A+B)*C+D)*B

     *
     + B
     * D
  + C
A B


作者 : dorkas(aming) VC++優秀好手遊戲程式設計卓越專家DirectX頂尖高手C++優秀好手貼文超過2000則
[ 貼文 2625 | 人氣 4536 | 評價 11810 | 評價/貼文 4.5 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/3 上午 09:28:10
老話一句 資料結構與演算法 2元樹

>(A+(B+C)-H)*D
     *
     - D
     + H
    A +
     B C


>、(A+B)*(B+C)

     *
  + +
A B B C


>(((A+B)*C+D)*B

     *
     + B
     * D
  + C
A B


作者 : dorkas(aming) VC++優秀好手遊戲程式設計卓越專家DirectX頂尖高手C++優秀好手貼文超過2000則
[ 貼文 2625 | 人氣 4536 | 評價 11810 | 評價/貼文 4.5 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/3 上午 09:30:16
抱歉 排版不好看
加上多貼幾次 我不是故意的 囧rz
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/3 下午 01:52:10
感謝大大dorkas(aming) 回覆~
但~能否勞駕給個實際一點的vb程式寫法或流程圖、敍述式的處理流程式解說....等^^!!!
作者 : lgd(lgd)
[ 貼文 87 | 人氣 927 | 評價 200 | 評價/貼文 2.3 | 送出評價 4 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/3 下午 02:42:46

寫出程式並非不可能

但是看看這個問題的簡單版本,若只有一種變數,一種OP,再加上任意括號的處理,所產生的組合數就己經 >= Catalan number了
現在這個問題有8種變數,4種OP,這樣子組合出來的種類將會是天文數字

3、5、7、9…程式能代入任意數字並執行出結果?我想這是不可能的

作者 : lgd(lgd)
[ 貼文 87 | 人氣 927 | 評價 200 | 評價/貼文 2.3 | 送出評價 4 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/3 下午 02:42:54

寫出程式並非不可能

但是看看這個問題的簡單版本,若只有一種變數,一種OP,再加上任意括號的處理,所產生的組合數就己經 >= Catalan number了
現在這個問題有8種變數,4種OP,這樣子組合出來的種類將會是天文數字

3、5、7、9…程式能代入任意數字並執行出結果?我想這是不可能的

作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/3 下午 08:15:43
感謝lgd(lgd)回覆~
但~8種變數,4種OP,長度求7位,就排列組合而言∼大約是8*8*4*7(不含刮號)組的變化∼加上刮號種種組合,也不致於是天文數字∼除非長度要求很長....

(3、5、7、9…程式能代入任意數字並執行出結果?我想這是不可能的)
不知你所謂為何?
就是把變數轉為數字,解四則運算答案吧了∼
如:公式∼(A+B)*C)-D,今知A=6、B=3、C=5、D=10,程式算出答案∼就醬子
解多重刮號四則運算式的程式是寫的出來了的∼
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++曠世奇才新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4737 | 人氣 9172 | 評價 31150 | 評價/貼文 6.58 | 送出評價 138 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/4 上午 12:18:45
>不含刮號、按順序的小弟已ok~
>但~如果如果含刮號的話,長度越長的四則運算式,其刮號變化就越多,〔層〕也不只一層∼
>(A+(B+C)-H)*D、(A+B)*(B+C)、(((A+B)*C)+D)*B....諸如此類∼
>已知範圍(靜態),可以在程式內按已知規則定好,但∼如果是按使用者輸入(動態)就無法如此∼
>不知您有何妙法可解?@.@

把括號左右分開處理, 動態配置所需括號的層數. 比方說式子有 5 個運算元:


 〔0〕 〔1〕 〔2〕 〔3〕 〔4〕
  A + A + A + A + A

如果有多層括號, 左括號從 [0] 逐個移到 [3], 右括號從 [1] 逐個移到 [4]. 移動方法如之前所講的「進位法」, 但有些不同. 用 3 層括號舉個例子:

  左括號2  左括號1  左括號0
  A〔0〕  A〔0〕  A〔0〕 <- 起始狀態
  A〔0〕  A〔0〕  A〔1〕
  A〔0〕  A〔0〕  A〔2〕
  A〔0〕  A〔0〕  A〔3〕
  A〔0〕  A〔0〕  A〔4〕 <- ***
  A〔0〕  A〔1〕  A〔1〕 <- ***
  A〔0〕  A〔1〕  A〔1〕
  ...
  A〔3〕  A〔3〕  A〔3〕

在 *** 的地方, 括號1 進位, 但括號 0 並不跳回到 A〔0〕.

只要在打印括號的時候要檢查例外的情況就應該可以了.

〔續...〕
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++曠世奇才新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4737 | 人氣 9172 | 評價 31150 | 評價/貼文 6.58 | 送出評價 138 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/4 上午 12:20:39
〔...續〕

完整 VB.NET 的程式如下.

Module ExpressionCombination

    Sub GetNextCombination(ByVal strList As String, ByRef chCombination() As Char)
     Dim bCarry As Boolean = True
     For n As Integer = Len(chCombination) - 1 To 0 Step -1
     Dim nPos As Integer = InStr(strList, chCombination(n))
     If (nPos = Len(strList)) Then
     nPos = 1
     Else
     nPos = nPos + 1
     bCarry = False
     End If
     chCombination(n) = strList(nPos - 1)
     If (bCarry = False) Then
     Exit For
     End If
     Next
    End Sub

    Structure PAREN_STATE
     Dim nStart As Integer
     Dim nEnd As Integer
     Public Sub New(ByVal nStart As Integer, ByVal nEnd As Integer)
     Me.nStart = nStart
     Me.nEnd = nEnd
     End Sub
    End Structure


    Function IsState(ByVal vParen() As Integer, ByVal nState As Integer) As Boolean
     For n As Integer = 0 To UBound(vParen)
     If (vParen(n) <> nState) Then
     Return False
     End If
     Next
     Return True
    End Function


    Sub GetNextParenState(ByRef vParen() As Integer, ByVal ParenState As PAREN_STATE)
     Dim bCarry As Boolean = True
     For n As Integer = 0 To UBound(vParen)
     If (vParen(n) = ParenState.nEnd) Then
     bCarry = True
     vParen(n) = ParenState.nStart
     Else
     bCarry = False
     vParen(n) = vParen(n) + 1
     End If
     If (bCarry = False) Then
     Exit For
     End If
     Next

     Dim nPrevious As Integer = -1
     For n As Integer = UBound(vParen) To 0 Step -1
     If (vParen(n) < nPrevious) Then
     vParen(n) = nPrevious
     End If
     nPrevious = vParen(n)
     Next
    End Sub

〔續...〕
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++曠世奇才新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4737 | 人氣 9172 | 評價 31150 | 評價/貼文 6.58 | 送出評價 138 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/4 上午 12:21:27
〔...續〕

    Sub PrintWithParen(ByVal chOperand() As Char, ByVal chOperator() As Char, ByVal vLParen() As Integer, ByVal vRParen() As Integer)
     For n As Integer = 0 To UBound(vLParen)
     If (Array.IndexOf(vRParen, vLParen(n)) <> -1) Then
     Return
     End If

     If (vLParen(n) >= vRParen(n)) Then
     Return
     End If
     Next

     For nOperand As Integer = 0 To UBound(chOperand)
     For nParen As Integer = 0 To UBound(vLParen)
     If (vLParen(nParen) = nOperand) Then
     Console.Write("(")
     End If
     Next

     Console.Write(chOperand(nOperand))

     For nParen As Integer = 0 To UBound(vRParen)
     If (vRParen(nParen) = nOperand) Then
     Console.Write(")")
     End If
     Next

     If (nOperand < UBound(chOperand)) Then
     Console.Write(" " & chOperator(nOperand) & " ")
     End If
     Next

     Console.WriteLine()
    End Sub


    Sub PrintWithParen(ByVal chOperand() As Char, ByVal chOperator() As Char, ByVal nParen As Integer)
     Dim LEFT_PAREN_STATE As PAREN_STATE = New PAREN_STATE(0, UBound(chOperand) - 1)
     Dim RIGHT_PAREN_STATE As PAREN_STATE = New PAREN_STATE(1, UBound(chOperand))
     Dim vLParen(nParen - 1) As Integer
     Dim vRParen(nParen - 1) As Integer

     For n As Integer = 0 To nParen - 1
     vLParen(n) = LEFT_PAREN_STATE.nStart
     vRParen(n) = RIGHT_PAREN_STATE.nStart
     Next

     Do
     Do
     PrintWithParen(chOperand, chOperator, vLParen, vRParen)
     GetNextParenState(vRParen, RIGHT_PAREN_STATE)
     Loop Until IsState(vRParen, RIGHT_PAREN_STATE.nStart)
     Console.WriteLine()
     GetNextParenState(vLParen, LEFT_PAREN_STATE)
     Loop Until IsState(vLParen, LEFT_PAREN_STATE.nStart)
    End Sub


    Sub PrintAllCombinations(ByVal strOperandList As String, ByVal strOperatorList As String, ByVal strOperandStart As String, ByVal strOperatorStart As String, ByVal nParen As Integer)
     Dim chOperand() As Char = strOperandStart.ToCharArray()
     Dim chOperator() As Char = strOperatorStart.ToCharArray()

     Do
     Do
     PrintWithParen(chOperand, chOperator, nParen)
     GetNextCombination(strOperatorList, chOperator)
     Loop Until (chOperator = strOperatorStart.ToCharArray())
     GetNextCombination(strOperandList, chOperand)
     Loop Until (chOperand = strOperandStart.ToCharArray())
    End Sub



    Sub Main()
     PrintAllCombinations("ABCDEFGH", "+-*/", "AAAA", "+++", 2)
    End Sub

End Module

作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++曠世奇才新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4737 | 人氣 9172 | 評價 31150 | 評價/貼文 6.58 | 送出評價 138 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/4 上午 12:32:46
我是先用 C++ 寫好, 測試後才轉換到 VB.NET 的. 對常用 VB 的高手來說, 可能會有些看不習慣. 同時由於這兩個語言對 array 的 upper bound 有些不同, 在轉換成 VB 的時候, 雖然儘量注意, 但也可能會有遺漏而導致錯誤的地方. 請 VB 高手多多指教.

作者 : dorkas(aming) VC++優秀好手遊戲程式設計卓越專家DirectX頂尖高手C++優秀好手貼文超過2000則
[ 貼文 2625 | 人氣 4536 | 評價 11810 | 評價/貼文 4.5 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/4 上午 02:13:38
解無限未知的四則運算很簡單
只要你會種樹就可以解

四則運算的pattren 就是 X OP Y

式子:= X OP Y
式子:=式子 OP X || X OP 式子

以 (A+(B+C)-H)*D為例
X1:=(A+(B+C)-H)
OP1:=*
Y1:=D

再分解 A+(B+C)-H
X2:=A
OP2:=+
Y2:=(B+C)-H

再分解 (B+C)-H
X3:=(B+C)
OP3:=-
Y3:=H

再分解 (B+C)
X4:=B
OP4:=+
Y4:=C

我們只要逆者回去計算就可以算出答案了

為要種樹 所以要有NODE 跟LEAF 這部分屬於資料結構
要解析文字..要有文字解析器<-------演算法
為了要旋轉2原樹的節點 <-------演算法

不過怎麼會拿窮舉法練習來當先置功課...根本牛頭不對馬嘴
作者 : lgd(lgd)
[ 貼文 87 | 人氣 927 | 評價 200 | 評價/貼文 2.3 | 送出評價 4 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/4 上午 10:29:50

但~8種變數,4種OP,長度求7位,就排列組合而言∼大約是8*8*4*7(不含刮號)組的變化∼加上刮號種種組合,也不致於是天文數字∼除非長度要求很長....

不對喔,假設沒有括號,假設沒有OP,若有 n 位變數的話,則正確的答案就己經是 8 ^ n ...

作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/5 上午 06:25:57
感謝大大dorkas(aming) 回覆~
但~能否勞駕給個實際一點的vb程式寫法或流程圖、敍述式的處理流程式解說....等^^!!!
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/5 上午 06:40:46
感謝~lgd(lgd) 回覆~
(...8種變數,4種O假設沒有括號,假設沒有OP,若有 n 位變數的話,則正確的答案就己經是 8 ^ n ...)
8^N∼的8是指8種變嗎?如果是那就等於是∼8^8是嗎?

長的用人工寫太麻煩∼小弟以短的∼A、B兩變數、運算子用一個+、長度五位,用人工寫出
大約排列組合如下:(不含括號)
A+A+A、A+A+B、A+B+B、A+B+A
B+A+A、B+A+B、B+B+A、B+B+B
應該沒遺漏吧∼如果照大大說言,那這又是多少次方?是2^5還是2^2?
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++曠世奇才新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4737 | 人氣 9172 | 評價 31150 | 評價/貼文 6.58 | 送出評價 138 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/5 上午 08:21:59
>長的用人工寫太麻煩∼小弟以短的∼A、B兩變數、運算子用一個+、長度五位,用人工寫出
>大約排列組合如下:(不含括號)
>A+A+A、A+A+B、A+B+B、A+B+A
>B+A+A、B+A+B、B+B+A、B+B+B
>應該沒遺漏吧∼如果照大大說言,那這又是多少次方?是2^5還是2^2?

不含括號的話, 應該是: 運算元的組合 乘 運算子的組合.

比方說有三個運算元

     X + X + X

每個運算元可以是 A 或 B, 那運算元的組合就是 2 * 2 * 2, 或 2^3.

所以:
  運算元的組合 = 每一個運算元的變化數目 x 式子有幾個運算元

同理:
  運算子的組合 = 每一個運算子的變化數目 x 式子有幾個運算子

而以 binary 運算子來說, 運算子的數目一定是運算元的數目減一.


作者 : dorkas(aming) VC++優秀好手遊戲程式設計卓越專家DirectX頂尖高手C++優秀好手貼文超過2000則
[ 貼文 2625 | 人氣 4536 | 評價 11810 | 評價/貼文 4.5 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/5 下午 12:18:29

>感謝大大dorkas(aming) 回覆~
>但~能否勞駕給個實際一點的vb程式寫法或流程圖、敍述式的處理流程式解說....等^^!!!


你自己何不嘗試自己寫一個...把虛擬碼 轉換成程式碼.......
而且這書上有的東西..何必又讓我又練習一次..我明明早就會了
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/5 下午 02:27:07
感謝dorkas(aming) 回覆~
小弟就是不才,寫不出來,才會發表此篇,尋求VB解答∼
因大大您從頭到尾的說明,像是在〔上數學課〕,不像是〔上程式課〕∼^^!!!
很難把您所說的〔理論〕,轉成程式碼∼

(書上有的東西....)??
市售VB書藉,那一本內容有提到類似此題的,小弟翻遍書局,頂多有解四則運算的VB書藉,
請大大指示,您看到那本書內容有,請提供一下,我去書局找一下∼謝謝∼^^
作者 : dorkas(aming) VC++優秀好手遊戲程式設計卓越專家DirectX頂尖高手C++優秀好手貼文超過2000則
[ 貼文 2625 | 人氣 4536 | 評價 11810 | 評價/貼文 4.5 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/5 下午 07:29:23
資料結構與演算法 很難找嗎 ?
這書教科書版本很多 而且跟語言無關

四則運算是國小程度的數學
難不成現在幼稚園都要學VB嗎=.=a

要別人解決你的問題..你要先解決你的問題


作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/5 下午 07:40:25
感謝dorkas(aming)回覆~
資料結構與演算法是不難找~^^!!!
這是vb程式設計討論區~當然跟vb程式語言有關~
在這裡提出的問題,當然是希望獲得vb程式語言方面的解答~
如果是純數學問題∼小弟早就去純數學討論區提問囉∼您說是吧∼

今天下午再度去書局翻遍c、c++、vc、vb、vb2005...
及書名標資料結構與演算法相關程式語言書藉,內容都沒深入提到類似此題的內容∼

現在只好上國外網站搜尋了...唉...=.=!!!
作者 : bensontan(Benson) 貼文超過1000則人氣指數超過30000點
[ 貼文 1054 | 人氣 40462 | 評價 3290 | 評價/貼文 3.12 | 送出評價 80 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/6 上午 12:51:24
我把程式放進VS.NET 2005, 然後除了修 bug 外, 加了三個 special rule的判斷式
1. ' Special rule : disable sign group
2. ' Special Rule : 要避免倒數第二個以後有左括弧
3. ' Special Rule : 要避免無運算的括弧 (A)

然後, 相信這結果應該是你要的:
n = 3 => 256 個 (A+A ... H/H)
n = 5 => 8192 個 (A+A+A ... H/H/H)
n = 7 => 286720 個 (A+A+A+A ... (H/H)/H)

問題是, 我覺得你很不努力, 因為程式與我之前貼的相似度真的很高, 前前後後只是
向人家要程式, 自己卻是只要一點不能動, 就寫得好像別人不願意幫你一樣~

你要程式我是可以post 出來, 只是要酌收工本費, 念在你是學生經濟有限, 就收
五千元好了~
作者 : bensontan(Benson) 貼文超過1000則人氣指數超過30000點
[ 貼文 1054 | 人氣 40462 | 評價 3290 | 評價/貼文 3.12 | 送出評價 80 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/6 上午 01:30:32
若你不要以下這種最前與最後有一對括號的,
(A+B+C)
加了上述這個規則後,N=7時, 共有 278528 個,
養小孩很缺錢,贊助一下吧∼:)
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/6 上午 10:19:56
感謝bensontan(Benson) 回覆~
不是我很不努力,我努力近二∼三個,解不出∼才發文請求協助∼
要是會的話,就不用發文了∼^^!!!!

前前後後不是只向人家要程式,當然有程式是最好不過∼^^!!!
前文回覆中,有提過也可提供程式處理的流程圖或以文字敍述方式的處理流程解說(前文有提九九乘法的例子)∼

另外,你的程式真能完全符合題目的要求嗎,能否編成執行檔,mail給我run看看,真的可以,再跟你買原始碼(當然最好是VB6的^^)?
這邊重貼一次前面貼過的完整題目解說,您確定一下您的程式是否符合∼

1.使用者輸入變數A、B兩個(變數範圍可A~Z....等)
2.輸入運算子+、*兩個(運算子可+-*/^ MOD....等)
3.輸入希望顯示一∼七位的長度的四則運算式的種種排列組合∼(最少三位至最多長度無限制)
以上三者都可由使用者輸入,屬動態範圍∼
單以〔7位長度〕的顯示內容來說大約如下:
A+A+A+A(七個字所以是七位)、A+A+A+B....A+(A*B).....(A+A)*B.......
B+A+A+A、B+A+A+B......
要能列出含多重刮號組合的運算式子,長度越長∼
如:(A+(A+A)+A)+A、(A+B)*(B+A)、(((A+B)*A)+A)*B....諸如此類的排列組合

以下則是不符合正常運算式表態、或無意義的呈現∼
((A))->多一層沒意義刮號、-(A)->變數呈現時,沒正、負問題,正負問題是將正、負數字代入變數時才有,所以這個也是沒意義的呈現∼

作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/6 上午 10:32:46
昨天整晚都上國外網站搜尋與程式有關的∼窮舉法"Exhaustive Attack method"、強力法 (Brute-force method)、排列組合(permutation combination)(Arrange the combination)、algorithm 演算法、expression 運算式...等,也都無所獲∼

倒是對岸(大陸)有類似的程式,且∼類似這種題目竟然在2004某檢定考中出現過∼
且∼有討論窮舉法方面的程式語言書也有幾本,只是台灣沒賣∼
昨天索性在對岸(大陸)討論區發文,沒多久,親愛的同胞們,就阿沙力貼了一篇程式碼給我∼
只是...程式處理運算式長度有限、無法處理多重刮號∼@.@!!!
今天只好繼續找對岸(大陸)其它討論區發文,看能不能在他們上億人口中,尋求高手解答...

作者 : dorkas(aming) VC++優秀好手遊戲程式設計卓越專家DirectX頂尖高手C++優秀好手貼文超過2000則
[ 貼文 2625 | 人氣 4536 | 評價 11810 | 評價/貼文 4.5 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/6 下午 12:22:36
我無悟了
你到底要解四則運算還是要窮舉算式!?

窮舉算式又沒有實質意義...不如練習寫樂透包牌程式還有趣一點...

如果是最終目的是解四則運算
目前你所做方向都是錯誤的
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/6 下午 12:53:07
感謝dorkas(aming)回覆∼
從題目來看∼當然是∼窮舉按所輸入的條件之∼按順序排、含多層刮號的所有算式的排列組合∼囉
沒意義就不會想寫,想寫就一定是有特殊目的;沒意義的有時會變成有意義,端看使用者如何應用∼

再者∼寫程式∼有時不是在於有沒有意義,而是在於用程式實現的可能性與否、創造的極限在何處與訓練邏輯...等等,如果每次都因為〔感覺〕沒意義,而不投入,那很多事就會因此不了了之...^^!!!
作者 : bensontan(Benson) 貼文超過1000則人氣指數超過30000點
[ 貼文 1054 | 人氣 40462 | 評價 3290 | 評價/貼文 3.12 | 送出評價 80 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/8 下午 02:30:33
>這邊重貼一次前面貼過的完整題目解說,您確定一下您的程式是否符合∼
>
>1.使用者輸入變數A、B兩個(變數範圍可A~Z....等)
>2.輸入運算子+、*兩個(運算子可+-*/^ MOD....等)
>3.輸入希望顯示一∼七位的長度的四則運算式的種種排列組合∼(最少三位至最多長度無限制)
>以上三者都可由使用者輸入,屬動態範圍∼
>單以〔7位長度〕的顯示內容來說大約如下:
>A+A+A+A(七個字所以是七位)、A+A+A+B....A+(A*B).....(A+A)*B.......
>B+A+A+A、B+A+A+B......
>要能列出含多重刮號組合的運算式子,長度越長∼
>如:(A+(A+A)+A)+A、(A+B)*(B+A)、(((A+B)*A)+A)*B....諸如此類的排列組合
>
>以下則是不符合正常運算式表態、或無意義的呈現∼
>((A))->多一層沒意義刮號、-(A)->變數呈現時,沒正、負問題,正負問題是將正、負數字代入變數時才有,所以這個也是沒意義的呈現∼

基本上, 我看到需求改變, 例如: MOD, 還可以無限制的增加, 而且, 原本我是印在螢幕上,
console.writeln, 但是 console 有 buffer 限制, 而指數型成長的排列組合, 在長度等於
9 以上就超過 2M而爆掉了

我現在正在改成 winform, 提供寫入至檔案 (並按時flush buffer), 想辦法提供可以輸出
部份排列組合~

基本的程式是work, 但原本是用字串存元素, 結果被 "MOD" 改成要用陣列來存

再改成 WinForm, 為了避免 hang, 可能還得用 thread 去解, 程式也變得較複雜

念在你是學生, 我只好要求酌收7,500, 若您要原本版本仍收5,000. 你考慮一下~

PS: 我可以寄第一版的結果(output)供您參考、驗證(有一點大)~ 煩請告知本人您的信箱~
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/8 下午 11:36:07
感謝 bensontan(Benson)回覆~
先澄清一下~需求並無改變丫~MOD也是運算子的其中一種~運算子也不只這些喔,如:^(次方)...也是∼
前面之回覆有說明 [使用者輸入的三項資料,都是動態範圍],只是小弟舉例+-*/....(最後有....表示喔)

按照大大所言~您的程式好像非[動態範圍],是有限制範圍的?????

我先run看看您的程式執行結果如何~
煩請寄halo168@yahoo.com.tw~謝謝!^^
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/9 上午 01:28:58
TO: bensontan(Benson)大大
收到您的寄了∼但∼怎麼不是執行檔∼而是執行結果檔?
我想測看看變數任意輸入A∼Z....範圍、運算子範圍+-*/....、長度範圍...
尤其是長度,我的話會直接測9、11、13...位以上長度∼看看多重(層)刮號的排列組合如何?

作者 : bensontan(Benson) 貼文超過1000則人氣指數超過30000點
[ 貼文 1054 | 人氣 40462 | 評價 3290 | 評價/貼文 3.12 | 送出評價 80 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/9 上午 08:16:54
你所需要的只是將下列數行改為由螢幕輸入, 若需要支援 mod 非單字元字串
則需要修改, 尤其是用 VB6的函式沒有 split可以用, 比較麻煩

> '將 ABCDEFGH 設為第一個 group (變數類)
> var gpVars = "ABCDEFGH"

> '將 "+-*/" 設為第三個 group (運算類)
> var gpOprs = "+-*/"

這則是要輸入N/Y, 若要支援括號, 則enable 它
> '將 "(" 設為第四個 group (左括號類)
> var gpLPas = "("

> '將 ")" 設為第五個 group (右括號類)
> var gpRPas = ")"

你可以先付我2500, 然後, 我把程式寄給你, 你再看看有什麼不滿意的, 改好後
再付我尾款
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/9 下午 01:38:16
to:bensontan(Benson)大大∼
首先∼澄清一點∼vb有~split函數喔∼Split可以依字串裡的某個字串來把整個字串來支解∼

第二、這則是要輸入N/Y, 若要支援括號, 則enable 它
> '將 "(" 設為第四個 group (左括號類)
> var gpLPas = "("

> '將 ")" 設為第五個 group (右括號類)
> var gpRPas = ")"

上面有點不懂?以這個題目來說∼刮號是必然要的,只是按四則運算規則,一定是七位開始才有括號的存在意義∼

第三、給個程式測試要先付2500???這個再考慮看看吧∼^^!!!
那能否再給個A~H變數範圍、+-*/範圍及11、17、21這三種位數的執行結果檔∼我想確認你的程式對多重(層)排列組合的情況∼謝謝!!

PS:按出題者所言,多重(層)刮號處理是這程式的重要之處∼
作者 : bensontan(Benson) 貼文超過1000則人氣指數超過30000點
[ 貼文 1054 | 人氣 40462 | 評價 3290 | 評價/貼文 3.12 | 送出評價 80 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/9 下午 02:11:22
1.No money no talk.
2.基本上您沒有瞭解output會多大,以11為例:
(8(A-H)^6 * 4(+-*/)^5 + 8^5 * 4^4 * 10 (1個括弧的排列) + 8^4 * 4^3 * 6 (2個括弧的排列) )* 13 (11bytes+換行字元) = 353,894,400
-- 可能還有漏算
3.若已知不會有括號, 那打 N 就可以了, 當然白跑也是可以
4.多個括號是可以的
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/9 下午 02:41:12
感謝~bensontan(Benson) 回覆
長度越長的,其排列組合出來的數量是越多,這是一定的∼
但∼按出題者所說∼隨機產生的會有重複性、遺漏性∼
按順序排列組合的,是沒有以上缺點∼除非沒完全掌握刮號、排列組合的規則∼

那現在我暫時不要程式∼單純想看〔A~H變數範圍、+-*/範圍及11、17、21這三種位數的執行結果檔〕可以嗎?output不是問題文字檔可以容納吧,不能容納,頂多切割存放∼
我想單純了解你的多重(層)刮號處理狀況如何∼^^

因為出題者說刮號處理不佳、造成不符四則運算式型態,會影響另一個模組的處理∼
作者 : bensontan(Benson) 貼文超過1000則人氣指數超過30000點
[ 貼文 1054 | 人氣 40462 | 評價 3290 | 評價/貼文 3.12 | 送出評價 80 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/9 下午 03:34:08
我已寄出關於 Length = 13, variables={a,b} operators={+-*/}
的結果, 相信您能對於括弧的疑問有所驗證~

若閣下不願意以$5,000元成交, 或是不願意先付$2,500獲取第一版的程式,
我想討論就到此, 我想程式與結果都已經提足夠了~ 只是看您的誠意了~
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/9 下午 04:03:09
再次感謝bensontan(Benson) 回覆~
感激你歷次的回覆∼在還是不能親自測試確定你的程式執行是否〔完全符合〕題目要求的情況下∼還是先不向您購買了∼
我準備閉關研究對岸(大陸)高手給我可行性很高的∼模版設計法的程式源碼∼
謝謝大家多日來的回應∼^^
作者 : bensontan(Benson) 貼文超過1000則人氣指數超過30000點
[ 貼文 1054 | 人氣 40462 | 評價 3290 | 評價/貼文 3.12 | 送出評價 80 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/9 下午 06:46:27
呵~ 真是賺個奶粉錢外快都這麼難呀?! 那您就請慢慢玩對岸寫的程式吧~
我好人做到底, 你過幾天還做不出來的話, 我還收你同樣的價錢~

ps: 我一個人寫過給微軟全公司 r&d / pss 用的系統, 居然還有人要懷疑我的程式結果?!
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/9 下午 08:00:18
感謝bensontan(Benson)回覆~
還是老話一句,術業有專攻∼
補習班老師也曾說過:〔曾設計過專業系統的,不一定就是什麼都會、什麼都寫得出來∼
所以,你們不要期望老師對你們各位所提的程式問題,都能獲得滿意的回答...〕

我是專攻影音、人工智慧方面的程式領域,如:最近我另外寫的一個∼聲道左右互換大量批次轉檔程式,這是因為要處理家中大量批次卡拉ok檔左右聲道不統一,而寫的,因為市面上、網路上目前沒這種大量批次處理聲道的工具∼^^!!!
作者 : bensontan(Benson) 貼文超過1000則人氣指數超過30000點
[ 貼文 1054 | 人氣 40462 | 評價 3290 | 評價/貼文 3.12 | 送出評價 80 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/9 下午 08:16:35
偶不知道補習班老師什麼時候奉為聖旨~ 畫地自限, 請留給自己用好了~

偶寫過帳務系統, 中文輸入法, game, 病毒、防毒, Platform SDK程式, 系統
核心程式, DMA 控制, language intepreter/tracer, 繪圖程式, 簡報程式,
分散式自動化程式, test framework, test automation, ... 等, 這還不包括
偶創新的部份~ 像最近看到報紙講偶去年在前公司提到的plug & play 路燈, 價
值 數百億元~

偶想天生偶材必有用, 回國只是貢獻而已~ 不過, 扶也要扶自己會動的~
作者 : mizar(Mizar) VC++優秀好手貼文超過200則
[ 貼文 249 | 人氣 133 | 評價 1240 | 評價/貼文 4.98 | 送出評價 17 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/9 下午 08:34:26
看到這裡覺得蠻有趣的,一個人是要如何在不了解資料結構和演算法的情況下,專攻影音、人工智慧方面?可以告知一下方法嗎,我真的很有興趣。

>我是專攻影音、人工智慧方面的程式領域,如:最近我另外寫的一個∼聲道左右互換大量批次轉檔程式,這是因為要處理家中大量批次卡拉ok檔左右聲道不統一,而寫的,因為市面上、網路上目前沒這種大量批次處理聲道的工具∼^^!!!
>
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/9 下午 08:35:12
感謝bensontan(Benson)回覆
澄清一點∼不是奉老師的話為聖旨哦∼只是一方面對他謙虛態度尊敬∼
一方面他講的也不無道理∼電腦程式領域何其廣,一個人功力再怎麼強,還是會有所謂∼術業有專攻的範圍∼
如同一個人,不可能同時會寫ERP、遊戲程式、系統程式、影音程式...等等∼
往往視其正在投入的領域而隨時間慢慢專精,相對其它的就會疏遠∼

大大您的資歷看起來真的很棒,小弟佩服!佩服!
小弟只是善於將程式應用於日常生活中或工作中,寫寫小程式以求改善人工之沒效率的作為...

所以囉,這個四則運算式就慢慢研究囉,真要研究不出來,就暫時擱置;因為還有一些改善日常工作要用到的小程式要陸陸續續的寫(如:聲道轉換加強、音標自動產生器更趨向完...)
作者 : bensontan(Benson) 貼文超過1000則人氣指數超過30000點
[ 貼文 1054 | 人氣 40462 | 評價 3290 | 評價/貼文 3.12 | 送出評價 80 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/9 下午 08:37:06
>我是專攻影音、人工智慧方面的程式領域,如:最近我另外寫的一個∼聲道左右互換大量批次轉檔程式,這是因為要處理家中大量批次卡拉ok檔左右聲道不統一,而寫的,因為市面上、網路上目前沒這種大量批次處理聲道的工具∼^^!!!

另外, 家用, 部門用, 公司內部用, 客戶用, 數萬人以上用, 基本上完全是不同的~
軟體品質、工具、方法 等皆不同~
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/9 下午 08:38:47
感謝mizar(Mizar)回覆:
影音、人工方面有書可看、可學丫,如:DIRECT方面、LISP...書局都有丫,還不少呢∼^^!!!
小弟是大部份都是學這類的....
作者 : mizar(Mizar) VC++優秀好手貼文超過200則
[ 貼文 249 | 人氣 133 | 評價 1240 | 評價/貼文 4.98 | 送出評價 17 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/9 下午 08:56:44
了解,你用的應該是Microsoft DirectX吧,影音方面應該是用DirectShow串接現成的Filter做出來的吧。我個人猜測你的年紀應該還很輕吧,有此修為應該是不錯了啦,加油。


>感謝mizar(Mizar)回覆:
>影音、人工方面有書可看、可學丫,如:DIRECT方面、LISP...書局都有丫,還不少呢∼^^!!!
>小弟是大部份都是學這類的....
作者 : morphingman(morphingman)
[ 貼文 102 | 人氣 448 | 評價 150 | 評價/貼文 1.47 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/9 下午 09:06:07
也實在奇怪
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++曠世奇才新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4737 | 人氣 9172 | 評價 31150 | 評價/貼文 6.58 | 送出評價 138 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/9 下午 09:30:17
>我是專攻影音、人工智慧方面的程式領域,如:最近我另外寫的一個∼聲道左右互換大量批次轉檔程式,這是因為要處理家中大量批次卡拉ok檔左右聲道不統一,而寫的,因為市面上、網路上目前沒這種大量批次處理聲道的工具∼^^!!!

看來樓主您的程式都是比較 practical 的.


>所以囉,這個四則運算式就慢慢研究囉,...

所以我就對這個所謂的「四則運算式」很好奇, 因為據我的了解, 你要的只是打印出一個固定長度運算式的所有可能組合而已 (還是我了解錯了). 這個除了做練習外似乎沒有什麼實際上的用處, 還不如做個 expression parser 的程式.

至於打印運算式組合的程式, 我上面早已做出來了, 您有去看看嗎?

作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/9 下午 10:02:20
感謝sflam(Raymond)回覆∼
(...只是打印出一個固定長度運算式...)
可能是小弟表達欠佳∼是使用者〔動態〕輸入資料範圍∼不是固定∼
要能隨使用者輸入+-*\...(不只這四個喔),及最少3、5、7....至沒限制長度範圍..
如果是〔固定範圍〕〔刮號〕又只有一層,那還ok∼
如今是〔動態範圍〕、〔刮號層數組合變化〕隨運算式長度而更多...
卡在刮號的層數匹配問題∼

小弟不才∼大大的程式是C、VB2005,還沒深入學習,也沒該程式語言軟體,加上程式沒多加註解說明,所以,不是很了解,也無法自行RUN測試了解,但∼有暫時先將大大的程式COPY下來,待後續再接觸C、VB2005的話,再深入研究∼^^!!!

至於這個程式是有實際用途的,而且超乎一思考模應用模式....以上是出題者說的∼
小弟就是想知道他所謂為何,所以,才想寫(只因他說,寫出來他才會告訴我)
且∼他說單單這個程式確實沒用途,就只是排列組合;得另外合併另一個(或二個)程式模組,才可發揮效用∼
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++曠世奇才新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4737 | 人氣 9172 | 評價 31150 | 評價/貼文 6.58 | 送出評價 138 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/9 下午 10:57:03
>感謝sflam(Raymond)回覆∼
>(...只是打印出一個固定長度運算式...)
>可能是小弟表達欠佳∼是使用者〔動態〕輸入資料範圍∼不是固定∼
>要能隨使用者輸入+-*\...(不只這四個喔),及最少3、5、7....至沒限制長度範圍..

你表達能力算是不錯了, 但可能你沒抓到程式的重點.

即使是使用者輸入, 但在整個執行的過程中, 它都是「固定」的 N 個 entities (Entity 包括運算元, 運算子, 及括號). 在我的例子裡, 主要進入點是 PrintAllCombinations(), 輸入的都是變數, 也沒限制長度範圍.

Main() 裡面的呼叫雖然用的是一個固定的字串, 那是例子. 我認為以你的經驗來說, 讓使用者輸入資料, 如運算元字串, 有幾個 entity, 有幾個括號, 等等..., 然後在程式裡轉成 PrintAllCombinations() 所需的字串應該不會困難, 而且也不是整個程式的主要邏輯所在 (整個程式的重點應該是打印式子組合的邏輯).


>如果是〔固定範圍〕〔刮號〕又只有一層,那還ok∼
>如今是〔動態範圍〕、〔刮號層數組合變化〕隨運算式長度而更多...
>卡在刮號的層數匹配問題∼

PrintAllCombinations() 其中一個參數就是式子裡括號的數目. 而且我在回覆裡也寫了括號組合的邏輯. 你有認真的去研究並嘗試用你所熟悉的語言來 implement 嗎?

既然你其他的都搞定了, 就把你目前寫好的程式碼貼上來給大家研究一下吧.


>小弟不才∼大大的程式是C、VB2005,還沒深入學習,也沒該程式語言軟體,加上程式沒多加註解說明,所以,不是很了解,也無法自行RUN測試了解,但∼有暫時先將大大的程式COPY下來,待後續再接觸C、VB2005的話,再深入研究∼^^!!!

沒程式語言軟體可以去微軟免費下載 VB 2005 Express Edition. C++ 語言也有免費的 Visual C++ Express Edition 可以下載.


>至於這個程式是有實際用途的,而且超乎一思考模應用模式....以上是出題者說的∼
>小弟就是想知道他所謂為何,所以,才想寫(只因他說,寫出來他才會告訴我)
>且∼他說單單這個程式確實沒用途,就只是排列組合;得另外合併另一個(或二個)程式模組,才可發揮效用∼

這個我就真的很想知道了. 出題者花了三年的時間也包括寫另一或二個程式模組嗎? 這是出題者的論文研究題目嗎?

作者 : 168(阿戊) Visual Basic一代宗師貼文超過2000則
[ 貼文 2957 | 人氣 7614 | 評價 11710 | 評價/貼文 3.96 | 送出評價 99 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/10 上午 01:49:22
樓主確實粉難得的 有回必應 ...
阿戊 個人認為 這篇實在不應該在這出現 (尤其愈看到後面... ><||| 雖然VB6版粉久沒有一篇有這麼熱絡過了...)
阿戊沒有其它意思~不過也該夠了吧...這篇對其它網友要看完應該會造成不小的負擔,實在不是站友之福~
是不是有請 有興趣繼續鑽研的網友互留一下連絡方式呀...(相信最後是不是會有完整的結果po上來,大家都會感謝泥棉滴...)
作者 : dorkas(aming) VC++優秀好手遊戲程式設計卓越專家DirectX頂尖高手C++優秀好手貼文超過2000則
[ 貼文 2625 | 人氣 4536 | 評價 11810 | 評價/貼文 4.5 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/10 上午 02:17:45

解四則運算 不是種樹最方便嗎?

還是用Stack push pop?



作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++曠世奇才新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4737 | 人氣 9172 | 評價 31150 | 評價/貼文 6.58 | 送出評價 138 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/10 上午 02:23:05
>解四則運算 不是種樹最方便嗎?
>
>還是用Stack push pop?

我認為是 stack push/pop (a.k.a. infix-to-postfix).

作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++曠世奇才新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4737 | 人氣 9172 | 評價 31150 | 評價/貼文 6.58 | 送出評價 138 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/10 上午 03:04:42
>樓主確實粉難得的 有回必應 ...

有同感.


>阿戊 個人認為 這篇實在不應該在這出現 (尤其愈看到後面... ><||| 雖然VB6版粉久沒有一篇有這麼熱絡過了...)
>阿戊沒有其它意思~不過也該夠了吧...這篇對其它網友要看完應該會造成不小的負擔,實在不是站友之福~

真對不起, 話太多了, 就此打住.

作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/10 下午 12:17:59
感謝168(阿戊) 、sflam(Raymond)回覆~
168(阿戊) 說的沒錯∼在一篇問題裡面沒有直接明確或完整/接近完整的程式答案或相關處理流程敍述方法回覆∼
會一直造成來回回覆,越拖越長,造成進來看的人,看得粉累∼
這也是小弟不願見的現象∼小弟在此深感抱歉∼

小弟拙見,在那個XX程式討論區,回覆問題時,最好是直接明暸用該XX程式答案或相關處理流程敍述方法,來解答,這樣可能對問題提出者較為直接了當,較不會越拖越長∼

如168(阿戊) 所言,各位大大、高手後續如沒直接明了完整/接近完整程式答案或相關處理流程敍述方法,就不用再回覆,不然∼小弟不才,看不懂的話又要再來來回回提出詢問∼^^!!!

謝謝各位多日來的熱情回覆∼^^

PS:回覆一下sflam∼出題者是專科畢業沒進修升學,所以,應當不可能是用在論文∼
作者 : dorkas(aming) VC++優秀好手遊戲程式設計卓越專家DirectX頂尖高手C++優秀好手貼文超過2000則
[ 貼文 2625 | 人氣 4536 | 評價 11810 | 評價/貼文 4.5 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/10 下午 01:04:51
這邊只提供釣竿 不提供魚...要魚要自己釣=.=;
要賣魚也可以 一尾5000 沒有殺半隻的
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/10 下午 01:36:21
回覆dorkas(aming) 大大:
您說的是丫~可惜!賣魚的只供試看,不提供試吃∼
怕最後中看不中吃∼^^!!!
作者 : dorkas(aming) VC++優秀好手遊戲程式設計卓越專家DirectX頂尖高手C++優秀好手貼文超過2000則
[ 貼文 2625 | 人氣 4536 | 評價 11810 | 評價/貼文 4.5 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/10 下午 04:52:42
因為我的魚離我比較近 所以看起來比較大
因為你的魚離我比較遠 所以看起來比較小
作者 : bensontan(Benson) 貼文超過1000則人氣指數超過30000點
[ 貼文 1054 | 人氣 40462 | 評價 3290 | 評價/貼文 3.12 | 送出評價 80 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/11 下午 12:31:35
偶想, 這一篇後來的部份也還不錯的, 至少可以給接案的人一些參考 :)

甲方:
請教高手一個不太可能寫得出來的程式∼
請問各位高手,以上用VB是否可做到,如何撰寫?煩請各位高手撥空指導撰寫方法

**評: 客戶常不知道自己要什麼, 他原本說的是:要問 "可行性" 以及"演算法"

乙方:
聽起來相當簡單...看起來是相當龐大
<語意解釋做法>

甲方:
題目最主要目的,是要列出變數搭配運算元之種種排列組合∼
...
PS:出題者說這個題目,他花了近三年時間研究撰寫成功,編譯後程式執行檔約2~3MB

**評:客戶常利用解釋需求來擴增需求, 請看: 原來說清楚點是加... ?!之後, 把它叫做 "無限延伸"

甲方:
我想直接套到VB6裡RUN看看...

乙方:
偶是寫語意, 當然 VB 也可以做! 希望你在瞭解偶的語意後, 自己用 VB 去寫~

甲方:
語意不懂可以問,但,不是我不問,是幾乎看不懂你程式裡用的指令單字用途、指令和變數分不清...得要逐行問∼^^!!!
出題者說,這題目大多數人都看似簡單,但∼寫得出來的廖廖無寂

乙方:
<語意解釋>
這樣應該夠了吧, 如果不懂再問...得要自己摸索~

甲方:
即然是語意,能否用流程圖或文字敍述式的流程表達,這樣子,可能較好看懂

乙方:
<逐一解釋語意>

甲方:
結果好像是無窮迴圈(遞回)不會結束∼

乙方:
把問題彙整出來問吧∼

甲方:
大都也是片面之詞,或指示方向、該看什麼書....
看來想要找到完整答案,不太可能,我還是先自己研究好了∼
老師回覆:按題目規則來說,按這個程式語法,是不能成功的∼

**評:客戶常利用別人來做不必負責的批評, 以及利用負面評論以求取實質獲得更多

甲方:
無法吸收您的程式語言加以運用...因為小弟只會VB6,在VB討論區發問,也是希望得到VB方面的解答...

乙方:
我把程式放進VS.NET 2005, 然後除了修 bug 外, 加了三個 special rule的判斷式
然後, 相信這結果應該是你要的: ...
問題是, 我覺得你很不努力, 因為程式與我之前貼的相似度真的很高, 前前後後只是
向人家要程式, 自己卻是只要一點不能動, 就寫得好像別人不願意幫你一樣~
你要程式我是可以post 出來, 只是要酌收工本費, 念在你是學生經濟有限, 就收五千元好了~

**評:如所述, 偶過去幫助業界後進與回學校傳承經驗可曾收取費用? 若不是因為開欄者只是一昧的伸手要程式,還再加諸負面批評。試問: 我們是 "應該" 回嗎?

甲方:
你的程式真能完全符合題目的要求嗎,能否編成執行檔,mail給我run看看,真的可以,再跟你買原始碼(當然最好是VB6的^^)?
這邊重貼一次前面貼過的完整題目解說,您確定一下您的程式是否符合∼
...
只好繼續找對岸(大陸)其它討論區發文,看能不能在他們上億人口中,尋求高手解答...

**評:
1.客戶常利用畫大餅(買原始碼) 來把需要的東西 (如:執行檔) 要到, 最後乙方什麼都拿不到
2.客戶常利用驗證來擴增需求
3.客戶常利用競爭來取得最佳的deal

乙方:
...程式也變得較複雜...只好要求酌收7,500, 若您要原本版本仍收5,000. 你考慮一下~
PS: 我可以寄第一版的結果(output)供您參考、驗證(有一點大)~ 煩請告知本人您的信箱~

**評:
1.需求改變一定要重估費用,以便確定或阻止不斷擴增的需求
2.驗證不需要把執行檔給客戶,切記

甲方:
需求並無改變丫~MOD也是運算子的其中一種~運算子也不只這些喔,如:^(次方)...也是∼
收到您寄的了∼但∼怎麼不是執行檔∼而是執行結果檔?...尤其是長度,會直接測9、11、13...位以上長度∼看看多重(層)刮號的排列組合如何?

**評:
乙方有時應依客戶的情況, 而不告知系統的限制, 以避免客戶恐慌或無理地用來當做談判的籌碼

乙方:
你所需要的只是將下列數行改為由螢幕輸入
你可以先付我2500, 然後, 我把程式寄給你, 你再看看有什麼不滿意的, 改好後再付我尾款

**評:
記得到此乙方都在做白工, 以此為例, 整個功能只剩下一些I/O的部份而已了, 所以一定要瞭解,做出停損點∼
作者 : bensontan(Benson) 貼文超過1000則人氣指數超過30000點
[ 貼文 1054 | 人氣 40462 | 評價 3290 | 評價/貼文 3.12 | 送出評價 80 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/11 下午 12:33:32
甲方:
給個程式測試要先付2500???這個再考慮看看吧∼
我想確認你的程式對多重(層)排列組合的情況
PS:按出題者所言,多重(層)刮號處理是這程式的重要之處

**評:
相比較第一篇可曾提到多重括號? 客戶常利用老闆說的或其他各種理由, 把擴充功能的需求講得想必須的∼沒做是乙方的錯,不是因為他沒有列在原本需求中

乙方:
多個括號是可以的

甲方:
我想單純了解你的多重(層)刮號處理狀況如何∼^^
因為出題者說刮號處理不佳、造成不符四則運算式型態,會影響另一個模組的處理∼

乙方:
若閣下不願意以$5,000元成交, 或是不願意先付$2,500獲取第一版的程式,我想討論就到此, 我想程式與結果都已經提足夠了~ 只是看您的誠意了~

**評:
看到 "另一個模組" 了嗎? 這是甲方漏餡的地方, 所以, 請趕緊停損

甲方:
感激你歷次的回覆∼在還是不能親自測試確定你的程式執行是否〔完全符合〕題目要求的情況下∼還是先不向您購買了∼

**評:
這就是拒絕感謝函了~

甲方:
在那個XX程式討論區,回覆問題時,最好是直接明暸用該XX程式答案或相關處理流程敍述方法,來解答,這樣可能對問題提出者較為直接了當,較不會越拖越長∼
您說的是丫~可惜!賣魚的只供試看,不提供試吃∼怕最後中看不中吃∼^^!!!

**評:
1.希望讀者有所領悟,甲方一來不付一毛錢還要乙方做一堆事,事後還要在背後中傷∼ (就是類似所謂客戶不給錢還要告你)
2.請學會原則: "你可以先付我xxx, 然後, 我把程式寄給你, 你再看看有什麼不滿意的, 改好後再付我尾款", 一來可以停損也表達誠意~

**超過 2000 字, 拆成兩部份, 不方便處請見諒
作者 : bensontan(Benson) 貼文超過1000則人氣指數超過30000點
[ 貼文 1054 | 人氣 40462 | 評價 3290 | 評價/貼文 3.12 | 送出評價 80 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/11 下午 01:35:47
>...(相信最後是不是會有完整的結果po上來,大家都會感謝泥棉滴...)
除開欄者外, 以上所有回文的網友若需要參考此程式碼, 可留 e-mail, 我會將程式碼寄給您, 也請您就該程式與偶之前 po 的, 除了語法改正外, 是否還有太大的異同提出您的看法~ 謝謝~

以下是開欄者之前PO 的:
>片面之詞,或指示方向
>按題目規則來說,按這個程式語法,是不能成功的∼
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/11 下午 01:45:07
感謝bensontan(Benson)、dorkas(aming) 回覆~
不過怎麼一直還在回覆呢?不是說了,聽阿戊大大的建議到此為止了嗎∼^^!!!
bensontan(Benson)、dorkas(aming)兩位大大你們講的都是對的∼
都是小弟一個人的錯∼不要再回覆了∼讓這篇沈下去吧∼反正沒人會po完整或接近完整答案程碼、或處理流程敍述....

如阿戊大大所言,對此題目有需求者,請私下mail聯絡bensontan(Benson)、dorkas(aming) 兩位高手∼或請另行開主題討論∼
謝謝各位囉∼∼^^
作者 : bensontan(Benson) 貼文超過1000則人氣指數超過30000點
[ 貼文 1054 | 人氣 40462 | 評價 3290 | 評價/貼文 3.12 | 送出評價 80 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/11 下午 01:58:39
>不過怎麼一直還在回覆呢?不是說了,聽阿戊大大的建議到此為止了嗎∼^^!!!
奇怪, sflam(Raymond) 又不是 bensontan & dorkas?

>反正沒人會po完整或接近完整答案程碼、或處理流程敍述....

偶可以執行的程式裡, 除了後加的 special rules外, 不僅與原PO 相同, 而且連
順序也相同, 請問: 沒有人 po "處理流程敘述" 嗎? 而程式碼也接近到只是語法
上的修改, 那您又如何說 "沒有接近完整答案程式碼"?

怪別人容易, 避重就輕! 重點是: 閣下不努力, 要別人寫一個完整又完全符合需求
的程式碼, 自己不努力又不付錢~ 在學校, 這個學生就該當掉, 在業界, 就該列為
拒絕往來戶~
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/11 下午 02:18:35
感謝bensontan(Benson) 大大回覆~
謹遵大大教誨,小弟銘謹於心∼
但∼能否請大大不要再用回覆來教誨小弟了,不然∼我又要再回覆∼
大大心中有所不滿要訓示小弟的話,可mail給小弟∼^^!!!

不然可能就要勞煩站長、板主刪掉此篇囉∼
作者 : bensontan(Benson) 貼文超過1000則人氣指數超過30000點
[ 貼文 1054 | 人氣 40462 | 評價 3290 | 評價/貼文 3.12 | 送出評價 80 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/11 下午 02:43:14
>大大心中有所不滿要訓示小弟的話,可mail給小弟∼^^!!!
別轉移焦點了, 請記得偶又不認識你, 評論是對事不對人~

>不然可能就要勞煩站長、板主刪掉此篇囉∼
所謂 "見賢思齊,見不賢而內自省", 別人的惡行也是莘莘學子良好的警惕教材∼
如此難得,怎可輕易刪除?
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/11 下午 02:47:24
感謝bensontan(Benson) 大大多次教誨~
好吧!bensontan(Benson) 大大您都這麼說了∼
那就請大大隨意吧∼恕小弟不再針對不滿訓示、教誨的內容做回覆囉∼請自便∼^^!!!
作者 : dorkas(aming) VC++優秀好手遊戲程式設計卓越專家DirectX頂尖高手C++優秀好手貼文超過2000則
[ 貼文 2625 | 人氣 4536 | 評價 11810 | 評價/貼文 4.5 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/11 下午 06:18:58
>讓這篇沈下去吧∼反正沒人會po完整或接近完整答案程碼、或處理流程躑z

有意思 兩擇的語義

1.這邊老手死要錢都藏步
2.這邊根本無人可以解答
作者 : bensontan(Benson) 貼文超過1000則人氣指數超過30000點
[ 貼文 1054 | 人氣 40462 | 評價 3290 | 評價/貼文 3.12 | 送出評價 80 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/12 上午 10:53:07
>(相信最後是不是會有完整的結果po上來,大家都會感謝泥棉滴...)
其實, 我寫完後又看了幾遍, 想想自己也是有不對的地方,

1.偶不是法官亦不是他的老師, 所以寫別人是否該被當, 是否應被列為拒絕往來戶,
不是偶有權決定的, 有些客戶對甲來說是好客戶, 對乙卻不必然, 所以, 主觀認知是
偏頗的

2.想自己專一時, 也有請學長幫偶把國中發明的數學 (x^2)' -> 2x, (後來才知道
那叫做微分), 寫出程式來, 因為 GWBasic 寫array shift 執行是很慢的~ 不懂才
要學~ 以此題目來看, 是自己的興趣而不是應付學校的作業, 因此, 偶想不必苛責~

偶已經把這個經驗的部份貼到接案外包經驗討論區去, 所以偶想應該把程式 po 出
來, 供網友們參考~ 希望相互切磋以及批評指教, 謝謝~

Module Module1
   '將 "ABCDEFGH" 設為第一個 group (變數類)
   Dim gpVars As String = "AB"
   '將 "+-" 設為第二個 group (符號類)
   Dim gpSgns As String = "+-"
   '將 "+-*/" 設為第三個 group (運算類)
   Dim gpOprs As String = "+-*/"
   '將 "(" 設為第四個 group (左括號類)
   Dim gpLPas As String = "("
   '將 ")" 設為第五個 group (右括號類)
   Dim gpRPas As String = ")"
   '用2^0, 2^1, 2^2, 2^3, 2^4 來表示是否取以上五類的開關
   Dim needVars As Integer = 1
   Dim needSgns As Integer = 2
   Dim needOprs As Integer = 4
   Dim needLPas As Integer = 8
   Dim needRPas As Integer = 16

   '設定初始可以是 變數, 符號 和 左括號類
   Dim nInitStatus As Integer = needVars Or needSgns Or needLPas

   '設定目前狀態為初始狀態
   Dim nStatus As Integer = nInitStatus

   '設定目前括號層數為0
   Dim nLeftPars As Integer = 0

   '設定"是"可以結束, (如: 當運算式為 "(", 則不可結束)
   Dim bEndable As Boolean = True

   Dim nLength As Integer

   Sub Main()
     Console.Write("Please input the length : ")
     nLength = Int32.Parse(Console.ReadLine())
     '若長度小於7, 不支援括號
     If nLength < 7 Then
     needLPas = 0
     needRPas = 0
     End If

     ' Special rule : disable sign group
     needSgns = 0

     '開始利用遞迴找出所有的運算式
     Call getFormula("", nStatus)
   End Sub
作者 : bensontan(Benson) 貼文超過1000則人氣指數超過30000點
[ 貼文 1054 | 人氣 40462 | 評價 3290 | 評價/貼文 3.12 | 送出評價 80 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/12 上午 10:57:25
Sub getFormula(ByVal formula As String, ByVal status As Integer)

     '用來預備存下一個狀態
     Dim nNextStatus As Integer = 0
     '用來存狀態 bitwise and的值
     Dim nTestResult As Integer = 0
     '公式目前的長度
     Dim nDepth = formula.Length
     '記錄取字串的位置
     Dim nPos = 0
     '記錄字串取出的字元
     Dim sCh As String = ""

     Dim bEndableReset As Boolean = bEndable
     Dim nLeftParsReset As Integer = nLeftPars

     '如果目前長度等於指定長度並且可以結束, 則印出運算式
     If nDepth = nLength Then
     If nLeftPars = 0 And bEndable Then
     Console.WriteLine(formula)
     End If
     Else

     '若目前可以加變數類
     nTestResult = status And needVars
     If nTestResult <> 0 Then
     '若目前括號層數為0, 則加變數類後, 是可以結束的
     If nLeftPars = 0 Then
     bEndable = True
     End If

     '變數後下一個可以加的是運算式
     nNextStatus = needOprs

     '若有左括弧,則可以加右括弧類, 如: (A的情況可以是 (A+ or (A)
     If nLeftPars > 0 Then
     nNextStatus = nNextStatus Or needRPas
     End If

     For nPos = 0 To gpVars.Length - 1
     sCh = gpVars.Substring(nPos, 1)
     Call getFormula(formula + sCh, nNextStatus)
     Next

     bEndable = bEndableReset

     End If

     '若目前可以加符號類
     nTestResult = status And needSgns
     If nTestResult <> 0 Then
     If bEndable Then
     bEndable = False
     End If

     '遞迴呼叫下一個字元 (必定是變數)
     For nPos = 0 To gpSgns.Length - 1
     sCh = gpSgns.Substring(nPos, 1)
     Call getFormula(formula + sCh, needVars)
     Next
     bEndable = bEndableReset
     End If
作者 : bensontan(Benson) 貼文超過1000則人氣指數超過30000點
[ 貼文 1054 | 人氣 40462 | 評價 3290 | 評價/貼文 3.12 | 送出評價 80 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/12 上午 11:01:57
'若目前可以加運算類
     nTestResult = status And needOprs
     If nTestResult <> 0 Then
     '因為是運算, 所以不可以結束
     If bEndable Then
     bEndable = False
     End If
     '運算元後可以加變數或左括號類
     nNextStatus = needVars Or needLPas
     '遞迴呼叫下一個字元 (必定是變數)
     For nPos = 0 To gpOprs.Length - 1
     sCh = gpOprs.Substring(nPos, 1)
     Call getFormula(formula + sCh, nNextStatus)
     Next
     bEndable = bEndableReset
     End If

     '若目前可以加左括弧
     nTestResult = status And needLPas

     ' Special Rule : 要避免倒數第二個以後有左括弧
     If nDepth >= nLength - 2 - nLeftPars Then
     nTestResult = 0
     End If

     If nTestResult <> 0 Then

     '因為是左括弧, 所以不可以結束
     If bEndable Then
     bEndable = False
     End If

     '運算元後可以加變數或左括號類
     nNextStatus = needVars Or needSgns Or needLPas
     nLeftPars = nLeftPars + 1
     '遞迴呼叫下一個字元 (必定是變數)
     For nPos = 0 To gpLPas.Length - 1
     sCh = gpLPas.Substring(nPos, 1)
     Call getFormula(formula + sCh, nNextStatus)
     Next
     bEndable = bEndableReset
     nLeftPars = nLeftParsReset
     End If

     '若目前可以加右括弧
     nTestResult = status And needRPas
     ' Special Rule : 要避免無運算的括弧 (A)
     If formula.LastIndexOf("(") + 2 = nDepth Then
     nTestResult = 0
     End If
     If nDepth = nLength - 1 And formula.StartsWith("(") = True Then
     nTestResult = 0
     End If

     If nTestResult <> 0 Then

     nLeftPars = nLeftPars - 1

     '如果沒有層數, 就設為可結束的
     If nLeftPars = 0 And bEndable = False Then
     bEndable = True
     End If

     '遞迴呼叫下一個字元 (必定是變數)
     For nPos = 0 To gpRPas.Length - 1
     sCh = gpRPas.Substring(nPos, 1)
     Call getFormula(formula + sCh, needOprs)
     Next

     bEndable = bEndableReset
     nLeftPars = nLeftParsReset

     End If

    End If

  End Sub

End Module
作者 : kagaya(kagaya) VC++優秀好手貼文超過1000則人氣指數超過30000點
[ 貼文 1486 | 人氣 38709 | 評價 4310 | 評價/貼文 2.9 | 送出評價 106 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/12 上午 11:24:30
其實Raymond大大寫的就很詳細了
原理也解釋得很清楚
既然你對程式這麼有興趣
資料結構和演算法就看一下吧
一定會讓你覺得有收獲的
作者 : okane(龍)
[ 貼文 154 | 人氣 3211 | 評價 410 | 評價/貼文 2.66 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/12 上午 11:25:53
看到大家這麼熱烈的討論
我也分享一下自己的程式

http://myhome.ethome.com.tw/alan56/comb_vbs.htm


這是之前用 VBScript 寫的排列組合遞迴函式
可以直接在命令列C:\>下執行, 若輸出到檔案只需要加個
"大於"的轉向符號就行了
也有改成 JavaScript 版和 C/C++/C# 版

日前上來這裡看到此篇討論於是小改版多加了四則數學算式,
至於括號的部分則尚未完成, 我想這是此篇討論重點,
在邏輯處理上確實有點難度, 不過, 我想... 利用程式遞迴原理
應該是最佳的解法了, 若不用遞迴的話, 光是記錄程式執行的狀態
就有夠你忙的了

我的想法是:
只要遇到一個括號組就把它視為是另外一個新的變數,
然後再加入到產生算式的變數待選清單, 若不使用遞迴的話,
也可以自己寫一個處理 stack 的程式

還有, 依照樓主的題意括號要有意義, 我整理得到...
有意義的括號應該是像這樣:
(A+A)+A
A*(A*A)
(A+A)*(A*A)
(A+A*A)*A

無意義的括號像:
(A)+A
((A+A))+A
(A*(A*A))
((A+A*A)*A)



此篇討論引發了我探究的興趣
因此我會繼續修改程式, 試著去完成達到這樣的功能


順便問下樓主 不知您是否已有獲得對岸共匪的解答
還是已有其他解法, 希望您不要吝嗇和大家分享
作者 : okane(龍)
[ 貼文 154 | 人氣 3211 | 評價 410 | 評價/貼文 2.66 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/12 上午 11:59:28
JavaScript 版

http://myhome.ethome.com.tw/alan56/comb_js.htm

(編寫修改中)
作者 : bensontan(Benson) 貼文超過1000則人氣指數超過30000點
[ 貼文 1054 | 人氣 40462 | 評價 3290 | 評價/貼文 3.12 | 送出評價 80 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/12 下午 12:45:16
很好~ 既然有人有心要學, 偶就把些東西再拿出來, 點一下後進, 希望您們有所獲得~

其實, 大師要儘量當到船過水無痕, 偶早把東西已經藏好了~ 只是你們沒發覺而已~
所以, 偶就幫各位點一下:
>我現在正在改成 ...想辦法提供可以輸出 "部份" 排列組合~
>再改成 WinForm, 為了避免 hang, 可能還得用 thread 去解, 程式也變得較複雜

>2.基本上您沒有瞭解output會多大,以11為例:
>(8(A-H)^6 * 4(+-*/)^5 + 8^5 * 4^4 * 10 (1個括弧的排列) + 8^4 * 4^3 * 6 (2個括弧的排列) )* 13 (11bytes+換行字元) = 353,894,400

還沒通? 那看偶指 "猜數字只要7次" 的網站上, 旁邊另一篇偶 9/27的post.
http://brainden.com/forum/viewtopic.php?f=7&t=559

簡而言之, 不用遞迴, 不用 stack, 其實, 指定第n個就可以 "解" 出排列組合,
也因此可以用多個thread去解, 不用遞迴, stack, tree 等來解~
作者 : bensontan(Benson) 貼文超過1000則人氣指數超過30000點
[ 貼文 1054 | 人氣 40462 | 評價 3290 | 評價/貼文 3.12 | 送出評價 80 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/12 下午 02:55:07
再寫一遍, 希望之前的回文者以及未來的讀者都看到~
排列組合問題不用遞迴, stack, tree, ... 等方式解~

只要依照以下 pattern 去寫就可以了:

1.計算有總共有總個排列組合(T)
2.FOR L1=1 to T
3. '組合 L1's 排列組合
4. FOR L2=1 to Length
5. 依 L1 與 L2 的計算, 從 candidate中取出第 f(L1,L2) 的字元
6. NEXT L2
4.NEXT L1

至於 okane(龍) 網友的問題:
>依照樓主的題意括號要有意義, 我整理得到...
>有意義的括號應該是像這樣:...無意義的括號像:

之前已回覆過, 只是你沒有看仔細, 所以特別放在下面給你看~
>2. ' Special Rule : 要避免倒數第二個以後有左括弧
> If nDepth >= nLength - 2 - nLeftPars Then
> nTestResult = 0
> End If
>3. ' Special Rule : 要避免無運算的括弧 (A)
> If formula.LastIndexOf("(") + 2 = nDepth Then
> nTestResult = 0
> End If

重覆老話一句, 希望各位不要入寶山空手而回~
作者 : yjl1668(天兵)
[ 貼文 88 | 人氣 1835 | 評價 60 | 評價/貼文 0.68 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/12 下午 03:02:52
請問一下, 這些運算式在現實生活中應用在哪裡??
作者 : bensontan(Benson) 貼文超過1000則人氣指數超過30000點
[ 貼文 1054 | 人氣 40462 | 評價 3290 | 評價/貼文 3.12 | 送出評價 80 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/12 下午 03:18:52
偶就當閣下 "真問" 而真回答好了, 這是偶用過的:
1.電信公司在設定 "特殊" 的手機門號給予較貴的價錢, 如: 789789. 所以要把這類
的排列組合產生出來
2.要依系統狀態圖進行測試, 利用排列組合程式把所有 test case & test automation
"產生" 出來

除此以外, 像大家耳熟的包牌程式, 等都是~

另外, 偶有告訴過別人一種超強的壓縮方法, 就是除了 pattern / hufferman 等外,
利用 function 來進行壓縮, 請參考此篇
http://brainden.com/forum/viewtopic.php?f=7&t=560

也就是, 偶不用傳 function body, 直接傳排列組合的 function 編號, 以及它的
次數, 就可以把各種資料排列的樣式壓縮起來

更進一步來說, 若你知道 "各種" formula, 你可以進一步用在像化學物質物理特性
研究, 基因定位分析 等需求上~
作者 : dorkas(aming) VC++優秀好手遊戲程式設計卓越專家DirectX頂尖高手C++優秀好手貼文超過2000則
[ 貼文 2625 | 人氣 4536 | 評價 11810 | 評價/貼文 4.5 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/12 下午 03:34:16

>再寫一遍, 希望之前的回文者以及未來的讀者都看到~
>排列組合問題不用遞迴, stack, tree, ... 等方式解~

我是指 解未知四則運算 需要使用 遞迴, stack, tree之類 =.=a
因為樓主回文透露出老師的最終的目的是用來解未知的四則運算, 而不是排列四則算式

窮舉四則算式..
這只不過是 九九乘法的豪華版..多幾個迴圈 幾個if

N項算式 會有0~(N-1)的括號組合...
這個問題是NP..很無聊 N大一點 電腦就跑不完了
跟算PI的小數第幾位一樣
不過能把執行檔寫到2~3M也是高手啦
作者 : yjl1668(天兵)
[ 貼文 88 | 人氣 1835 | 評價 60 | 評價/貼文 0.68 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/12 下午 03:37:59
我是真的問的阿, 謝謝啦
作者 : bensontan(Benson) 貼文超過1000則人氣指數超過30000點
[ 貼文 1054 | 人氣 40462 | 評價 3290 | 評價/貼文 3.12 | 送出評價 80 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/12 下午 04:02:29
>我是指 解未知四則運算 需要使用 遞迴, stack, tree之類 =.=a
>因為樓主回文透露出老師的最終的目的是用來解未知的四則運算, 而不是排列四則算式
重點在 不遺漏的 "產生" 公式, 而不是計算! 就像 E=mc^2, 公式得來不易~

要計算可以用 stack, push成後置然後再push/pop 出來算出結果
偷懶只要外call scripting language 丟進 eval 再抓回來就可以了, 可能不到5行

>N項算式 會有0~(N-1)的括號組合...
>這個問題是NP..很無聊 N大一點 電腦就跑不完了
請參考前述, 此是 NP 的次數, 但不一定要用 NP 的解法, 而是可以用O(mn) 的解法
即 m=p^q, n=length. 以9*9乘法表為例, 即第m 列的內容可以寫成: {m=81, n=1}
for m = 1 to 81
  print (int(m/9)+1).toString() + "*" + (m % 9 + 1).toString() + "=" + ((int(m/9)+1)*(m % 9 + 1)).toString()
next m

究其主要原因是, 電腦架構走向 "多CPUs+多threads", "儲存成本可大量且低廉" 等方向~
作者 : aqr199pro(水瓶狂龍) 人氣指數超過10000點
[ 貼文 107 | 人氣 14016 | 評價 210 | 評價/貼文 1.96 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/12 下午 05:59:43
以下是我個人的分析, 程式碼是vbs

步驟一:產生三位數的資料(不使用括號)
s=Array("A","B","C","D","E","F","G","H")
p=Array("+","-","*","/")
For Each B1 in p
 For Each A2 in s
  For Each A1 in s
   Wscript.Echo A1 & B1 & A2
  Next
 Next
Next

產生結果: 變數(A~H) 運算元(+-*/) 變數(A~H)



步驟二:產生五位數的資料(不使用括號), 用以上程式碼再包一層變數迴圈跟運算元迴圈

s=Array("A","B","C","D","E","F","G","H")
p=Array("+","-","*","/")
For Each B2 in p
 For Each A3 in s
  For Each B1 in p
   For Each A2 in s
    For Each A1 in s
     Wscript.Echo A1 & B1 & A2 & B2 & A3
    Next
   Next
  Next
 Next
Next

產生結果: 變數(A~H) 運算元(+-*/) 變數(A~H) 運算元(+-*/) 變數(A~H)


步驟三:產生七位數的資料(我的方法是使用五位數產生的資料來產生)

產出結果因為是一個變數一個運算元加上一對刮號內有二個變數一個運算元
範例:A+(A+A)、A-(A+A)、A/(A+A)、A*(A+A)、(A/A)+)、(A*A)+A
這二組的結果在五位數裡己經有相同結果了
A+(A+A)、A-(A+A)
這四組的結果會因為括號而有不同結果
A/(A+A)、A*(A+A)、(A/A)+A、(A*A)+A

所以在五位數產生的資料內找出 乘除 及 加減 交錯的資料來產生七位數資料
A/A+A - > (A/A)+A、A/(A+A)
A/A+A = (A/A)+A 這二個結果也是相同, 如果不處理的話, 只剩A/(A+A)

結論是只要找出有找出[乘除]及[加減]交錯的資料, 把加減的變數加上括號

以上
作者 : dorkas(aming) VC++優秀好手遊戲程式設計卓越專家DirectX頂尖高手C++優秀好手貼文超過2000則
[ 貼文 2625 | 人氣 4536 | 評價 11810 | 評價/貼文 4.5 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/12 下午 10:21:09
如果是N項式..那不就要 N層for loop......
演算法沒有scale性
還是現在程式員都很勤勞
多寫幾個版本當練功 交差時候程式碼看起來很偉大?
作者 : aqr199pro(水瓶狂龍) 人氣指數超過10000點
[ 貼文 107 | 人氣 14016 | 評價 210 | 評價/貼文 1.96 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/13 下午 02:59:18
抱怨文開始...
dorkas老大,您一點都不可愛, 打出來的字詞真是不中看
有時間批評, 為什麼不花時間寫程式碼來看看
抱怨文結果...

正文開始...

http://aqr199.myweb.hinet.net/Count.jpg
http://aqr199.myweb.hinet.net/Count1.jpg

我覺得這個問題很有趣, 雖然第一眼看不知道怎麼做
可是透過觀察及分析, 整理一些邏輯出來, 反而不是那麼難

透過步驟3, 可以整理出一些邏輯
1. 先產出四則運算式, 再處理刮號問題
2. 每個運算式可以用的刮號數量有上下限, 超過上限就沒有意義了
ex.
五位數的運算式只能有一對刮號
七位數可以有1~2對刮號, 可以處理成9,11位數的運算子
A+A+A+A
(A+A)+A+A
((A+A)+A)+A
A+(A+A)+A
(A+(A+A))+A
A+A+(A+A)
A+(A+(A+A))
(A+A)+(A+A)

每個運算式可以擁有的刮號數公式:2^(N-5) (N>=5)
PS. 假設, 沒求證過 嘿嘿~~

接下來就是要怎麼把刮號加上去的邏輯了

以上

作者 : dorkas(aming) VC++優秀好手遊戲程式設計卓越專家DirectX頂尖高手C++優秀好手貼文超過2000則
[ 貼文 2625 | 人氣 4536 | 評價 11810 | 評價/貼文 4.5 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/13 下午 07:03:06
這裡又不是MTV 我愛黑澀會..裝可愛要幹麻=.=a
忠言逆耳 良藥苦口

一個程式師本該要有思考的本能
一味要求解答..正確答案 ...
很抱歉程式領域中有N+1答案..
不同程度領悟的方法都不一樣

一直要人說出解法自己基本功夫卻都沒打穩
聽不懂 卻怪到阞漱H頭上

這邊沒有人有義務一定幫你們解答問題
我們只是在點石..點到璞玉 我們高興
點到頑石 我們笑笑

作者 : okane(龍)
[ 貼文 154 | 人氣 3211 | 評價 410 | 評價/貼文 2.66 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人halo168註記此篇回應為最佳解答 2007/10/21 上午 08:26:45
青菜底呷啦∼∼

你要的完整程式來囉!已經完全解答!

基本上就是排列組合的變種,我還是喜歡用遞迴程式來解,可以寫得精簡

VB.NET 2005 Express 和 C# 2005 Express 兩種版本都有

源碼也放上了,有需要的就下載吧∼

http://myhome.kbronet.com.tw/alan56/practice/practice2.htm

這花了我不少時間思考邏輯...還好終於有解出來

作者 : okane(龍)
[ 貼文 154 | 人氣 3211 | 評價 410 | 評價/貼文 2.66 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/21 上午 08:33:15
還有 JavaScript 版網頁也修改好了

可以線上立即測試

在這裡

http://kimn.myweb.hinet.net/practice/comb_js.htm

或這裡

http://myhome.kbronet.com.tw/alan56/comb_js.htm

作者 : okane(龍)
[ 貼文 154 | 人氣 3211 | 評價 410 | 評價/貼文 2.66 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/21 下午 03:35:51
以下是從輸出存檔節錄比較可以看出括號運作情形的部分


2606362:c+b+b-(a+c-c-a)
2606363:c+b+b-(a+c-c-b)
2606364:c+b+b-(a+c-c-c)
2606365:c+b+b-(a+(a+a))
2606366:c+b+b-(a+(a+b))
2606367:c+b+b-(a+(a+c))
2606368:c+b+b-(a+(a-a))
2606369:c+b+b-(a+(a-b))
2606370:c+b+b-(a+(a-c))
2606371:c+b+b-(a+(b+a))
2606372:c+b+b-(a+(b+b))
2606373:c+b+b-(a+(b+c))
2606374:c+b+b-(a+(b-a))
2606375:c+b+b-(a+(b-b))
2606376:c+b+b-(a+(b-c))
2606377:c+b+b-(a+(c+a))
2606378:c+b+b-(a+(c+b))
2606379:c+b+b-(a+(c+c))

......

2954875:c+((c-c+a)-c)-c
2954876:c+((c-c+b)-c)-c
2954877:c+((c-c+c)-c)-c
2954878:c+((c-c-a)-c)-c
2954879:c+((c-c-b)-c)-c
2954880:c+((c-c-c)-c)-c
2954881:c+((a+a)+a+a)-c
2954882:c+((a+b)+a+a)-c
2954883:c+((a+c)+a+a)-c
2954884:c+((a-a)+a+a)-c
2954885:c+((a-b)+a+a)-c
2954886:c+((a-c)+a+a)-c
2954887:c+((b+a)+a+a)-c
2954888:c+((b+b)+a+a)-c
2954889:c+((b+c)+a+a)-c

......

3891736:((b-(b-a))+a)-a
3891737:((b-(b-b))+a)-a
3891738:((b-(b-c))+a)-a
3891739:((b-(c+a))+a)-a
3891740:((b-(c+b))+a)-a
3891741:((b-(c+c))+a)-a
3891742:((b-(c-a))+a)-a
3891743:((b-(c-b))+a)-a
3891744:((b-(c-c))+a)-a
3891745:((c+a+a+a)+a)-a
3891746:((c+a+a+b)+a)-a
3891747:((c+a+a+c)+a)-a
3891748:((c+a+a-a)+a)-a
3891749:((c+a+a-b)+a)-a
3891750:((c+a+a-c)+a)-a
3891751:((c+a+b+a)+a)-a
3891752:((c+a+b+b)+a)-a
3891753:((c+a+b+c)+a)-a
3891754:((c+a+b-a)+a)-a
3891755:((c+a+b-b)+a)-a
3891756:((c+a+b-c)+a)-a
3891757:((c+a+c+a)+a)-a

......


程式執行檔
http://myhome.kbronet.com.tw/alan56/practice/PerComEx.exe
(才 28kb ^^ 要在有安裝 .NET Framework 2 的 PC 上 run)

執行畫面截圖一
http://myhome.kbronet.com.tw/alan56/practice/pce_s01.png

執行畫面截圖二
http://myhome.kbronet.com.tw/alan56/practice/pce_s02.png
作者 : halo168(halo168)
[ 貼文 73 | 人氣 8516 | 評價 50 | 評價/貼文 0.68 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/21 下午 08:25:22
感謝okane(龍) 大大回覆∼
本想這帖會沈下去,就算了∼
結果不得不回覆一下,太感謝okane(龍) 大大∼^^
您真是可以稱得上∼完美高手,不但寫出來,且∼不吝於分享源碼∼
中國人要是人人都像您一樣,不知可激發、造就更多人材∼
甚至當年創造windows、linux...等,可能就換成是中國人囉∼
中國人的詬病就是吝於寫經驗傳承的SOP文件、分享...離題了∼不好意思∼^^!!!

小弟有二個疑問∼
一、大大您是數學系嗎?還是本身數理能力就很強?
     因為小弟覺得這個程式可能要數理能力強的才有辦法∼^^
二、您的單機程式小弟測試一下發現,長度最大設定到49?是程式本身處理能力有所限制?
  還是理論上是可處理無限制長度的四則運算式?
   
為了研究您的程式邏輯,小弟決明天去買本VB.NET書來學∼
屆時有問題再MAIL詢問大大您∼^^
作者 : okane(龍)
[ 貼文 154 | 人氣 3211 | 評價 410 | 評價/貼文 2.66 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/22 上午 01:06:04
一、

興趣...一切都只是興趣,有時候興趣一上來,就像是被上了身一樣,好像
非很完成某件任務不可。這個題目的困難點在於加入括號的處理,有條件限制
必須排除掉不合理法的情況,但是其基本演算法仍然是排列組合,而程式邏輯
一旦想通了那麼程式就可以順理成章馬上寫出來。

二、

四則算式「理論上」長度當然是無限的,因為考量到實際條件(例如電腦執行
速度、硬碟容量等因素)而設了限。49這數字沒有特別意義,只是為了不要
讓數字太大而程式會跑不完,在實際應用上我想可能用不到吧!

如果你覺得不夠的話,我的程式源碼也都給了,自己修改吧∼
用VB 2005 Express(微軟免費下載)打開改個數字看你想給多少就多少,
重新建置一下不用花幾秒鐘建置完成就是新的程式囉∼∼
數字就只是怕你的電腦跑不完而已,否則不應該有限制的。了解嗎?

作者 : bensontan(Benson) 貼文超過1000則人氣指數超過30000點
[ 貼文 1054 | 人氣 40462 | 評價 3290 | 評價/貼文 3.12 | 送出評價 80 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/22 上午 11:26:24
1.樓上的, 你的網頁會因為執行太久, 所以造成頁面hang. 你應該參考以下網頁,
以避免此情形
http://www.programmer-club.com/pc2020v5/forum/ShowSameTitleN.asp?URL=N&board_pc2020=javascript&index=4&id=8435&mode=&type_pc2020=sametitleLevel-2

2.
>您真是可以稱得上∼完美高手,不但寫出來,且∼不吝於分享源碼∼
>中國人要是人人都像您一樣,不知可激發、造就更多人材∼
>甚至當年創造windows、linux...等,可能就換成是中國人囉∼
>中國人的詬病就是吝於寫經驗傳承的SOP文件、分享...離題了∼不好意思∼^^!!!

看了一些噁心的垃圾文, 不只一昧只會伸手要程式, 還有醜陋的民粹意識~
還好偶不是對岸那些數典忘祖的中國人~ 論輩份, 你長輩偶住到你弟家, 怎麼你就把你弟
房子說成自己的啦?!真是醜陋的中國人~
(當然也許這是他想把此篇刪除的一種手段吧~)
作者 : okane(龍)
[ 貼文 154 | 人氣 3211 | 評價 410 | 評價/貼文 2.66 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/22 下午 05:56:11
這是我在此篇的最後回應了

那麼... halo168(halo168) 兄
現在你可以告訴我誰是「出題者」嗎?
這是小弟一點小小要求

若不想在此回答,可以回覆到我的信箱
作者 : okane(龍)
[ 貼文 154 | 人氣 3211 | 評價 410 | 評價/貼文 2.66 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/6/2 下午 04:44:24
看到板上有人問到排列組合「非遞迴」程式怎麼寫

這篇問"不用遞迴"

http://www.programmer-club.com/pc2020v5/forum/showsametitleN.asp?board_pc2020=vb&id=32186

另篇是問"用遞迴"

http://www.programmer-club.com/pc2020v5/forum/ShowSameTitleN.asp?URL=N&board_pc2020=vb&id=32210


兩篇一併解答

於是我改了版v2, 新增「不使用遞迴」的排列組合程式片段

有興趣者, 上去我的網站下載

http://myhome.kbronet.com.tw/alan56/practice/



作者 : edison_wang(冰封情憶)
[ 貼文 1 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/11/12 下午 12:40:34
這個好像不是高手也有辦法寫!!!
小弟是菜鳥級的
但看很久後才知道這題目是..................
依續代入+-*/
............小弟不才
 板主 : 小樓
 > Visual Basic 6.0/VBA - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - Visual Basic 6.0/VBA - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
Visual Basic 6.0/VBA
1 阿戊 10670 
2 小樓 8650 
3 Jones 5270 
4 水瓶天賞 2340 
5 joe 2200 
6 史努比 1940 
7 阿呆紅 1440 
8 tt's 1250 
9 青衫 1150 
10 羅啟章 1020 
Visual Basic 6.0/VBA
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2014 程式設計俱樂部 http://www.programmer-club.com.tw/
0.546875