  | 
				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    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				真有意思!!
 
 
~^_^~ _________________ 人生有涯、學海無涯     ~^_^~ | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
  	 
	    
  	   | 
 	
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
  | 
   
  
		 |