 |
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
朱育興
註冊時間: 2003-08-25 文章: 661 來自: 台中市大里區
第 1 樓
|
發表於: 星期三 一月 14, 2004 1:32 am 文章主題: 小學3年級課本上的題 |
|
|
本人的職業病又犯了,在別的論壇看到一個數學題目,一時手癢,
放著手邊要趕的工作卻來解他問的題目:
小學3年級課本上的題
上看了這個題,很有意思:
1,2,3,4,5。五個數字。用加減乘除組合在一起,並且每個數字和符號位置不限,
但只能用一次 ,而且必須用一次, 讓它組合後得22 。 (大中小括可以隨便用)
我用下面的程式求出答案
(3/2-1+5)*4
(3/2+5-1)*4
4*(3/2-1+5)
4*(3/2+5-1)
4*(5-1+3/2)
4*(5+3/2-1)
(5-1+3/2)*4
(5+3/2-1)*4
事實上答案是一個,差異只是排列的順序
程序如下:
代碼: |
* 2004/01/14 朱育興 YSC E-MALI:y5096@ms23.hinet.net
* 是以數學窮舉法的概念來求解。
CLEAR ALL
CLOSE ALL
ON ERROR DO F_Error && 只是處理分母為零
* 取得 1、2、3、4、5 排列的情形
SELECT 0
CREATE CURSOR TMP_Num (NumList C(5))
FOR W1_SUB_A = 1 TO 5
FOR W1_SUB_B = 1 TO 5
IF W1_SUB_B = W1_SUB_A
LOOP
ENDIF
FOR W1_SUB_C = 1 TO 5
IF INLIST(W1_SUB_C,W1_SUB_A,W1_SUB_B)
LOOP
ENDIF
FOR W1_SUB_D = 1 TO 5
IF INLIST(W1_SUB_D,W1_SUB_A,W1_SUB_B,W1_SUB_C)
LOOP
ENDIF
FOR W1_SUB_E = 1 TO 5
IF INLIST(W1_SUB_E,W1_SUB_A,W1_SUB_B,W1_SUB_C,W1_SUB_D)
LOOP
ENDIF
APPEND BLANK
REPLACE NumList WITH TRANSFORM(W1_SUB_A*10000+W1_SUB_B*1000+;
W1_SUB_C*100+W1_SUB_D*10+W1_SUB_E,"@L 99999")
ENDFOR
ENDFOR
ENDFOR
ENDFOR
ENDFOR
* 取得 +、-、*、/ 四則運算排列的情形
DIMENSION M_aSign(4)
M_aSign(1) = "+"
M_aSign(2) = "-"
M_aSign(3) = "*"
M_aSign(4) = "/"
SELECT 0
CREATE CURSOR TMP_Sign (SignList C(4))
FOR W1_SUB_A = 1 TO 4
FOR W1_SUB_B = 1 TO 4
IF W1_SUB_B = W1_SUB_A
LOOP
ENDIF
FOR W1_SUB_C = 1 TO 4
IF INLIST(W1_SUB_C,W1_SUB_A,W1_SUB_B)
LOOP
ENDIF
FOR W1_SUB_D = 1 TO 4
IF INLIST(W1_SUB_D,W1_SUB_A,W1_SUB_B,W1_SUB_C)
LOOP
ENDIF
APPEND BLANK
REPLACE SignList WITH M_aSign(W1_SUB_A)+M_aSign(W1_SUB_B)+;
M_aSign(W1_SUB_C)+M_aSign(W1_SUB_D)
ENDFOR
ENDFOR
ENDFOR
ENDFOR
* 取得 1、2、3、4、5 與 +、-、*、/ 的混合運算式
DIMENSION M_aMum(5)
STORE SPACE(0) TO M_aMum
SELECT TMP_Num
SCAN ALL
FOR W1_SUB_A = 1 TO 5
M_aMum(W1_SUB_A) = SUBSTR(TMP_Num.NumList,W1_SUB_A,1)
ENDFOR
SELECT TMP_Sign
SCAN ALL
M_cExprList = SPACE(0)
FOR W1_SUB_A = 1 TO 4
M_cExprList = M_cExprList + M_aMum(W1_SUB_A) +;
SUBSTR(TMP_Sign.SignList,W1_SUB_A,1)
ENDFOR
M_cExprList = M_cExprList + M_aMum(5)
FOR W1_SUB_A = 1 TO 4
FOR W1_SUB_B = W1_SUB_A+1 TO 5
M_cExprList1 = SUBSTR(M_cExprList,1,(W1_SUB_A-1)*2)
M_cExprList3 = SUBSTR(M_cExprList,W1_SUB_B*2)
M_cExprList2 = SUBSTR(M_cExprList,LEN(M_cExprList1)+1,;
LEN(M_cExprList)-LEN(M_cExprList1+M_cExprList3))
M_cExprList0 = M_cExprList1 + "(" + M_cExprList2 + ")" + M_cExprList3
M_nExprList0 = EVAL(M_cExprList0)
IF M_nExprList0 = 22
? M_cExprList0
ENDIF
ENDFOR
ENDFOR
ENDSCAN
ENDSCAN
USE IN TMP_Sign
USE IN TMP_Num
ON ERROR
RETURN
FUNCTION F_Error
* 發生分母為零的錯誤時之處置
* Nothing
RETURN |
|
|
回頂端 |
|
 |
Ruey
註冊時間: 2003-03-12 文章: 1698 來自: tunglo
第 2 樓
|
發表於: 星期三 一月 14, 2004 1:18 pm 文章主題: |
|
|
你是學數學的嗎? _________________ #############################
快樂媽咪系列幸福宅配,喝十全雞湯~原來幸福那麼簡單!!
學會VFP使用者社區的搜尋,Code才會更有趣~
############################# |
|
回頂端 |
|
 |
朱育興
註冊時間: 2003-08-25 文章: 661 來自: 台中市大里區
第 3 樓
|
|
回頂端 |
|
 |
Ruey
註冊時間: 2003-03-12 文章: 1698 來自: tunglo
第 4 樓
|
發表於: 星期三 一月 14, 2004 6:04 pm 文章主題: |
|
|
那你跟我是同科系喔.
程式設計師不好做ㄛ
需要很要花很多的心思在上面.
要應用的知識必須自己去學. _________________ #############################
快樂媽咪系列幸福宅配,喝十全雞湯~原來幸福那麼簡單!!
學會VFP使用者社區的搜尋,Code才會更有趣~
############################# |
|
回頂端 |
|
 |
alensap
註冊時間: 2003-10-23 文章: 8
第 5 樓
|
發表於: 星期四 一月 15, 2004 6:36 pm 文章主題: |
|
|
真有意思!!
~^_^~ _________________ 人生有涯、學海無涯 ~^_^~ |
|
回頂端 |
|
 |
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|