|
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
朱育興
註冊時間: 2003-08-25 文章: 661 來自: 台中市大里區
第 1 樓
|
發表於: 星期日 十二月 21, 2003 12:03 am 文章主題: 遞迴函數的應用4--找出 N 以內的所有完數 |
|
|
* 這是動感游標論壇的「智力比拚」所出的題目
* 為求排版美觀,空白為全形空白,若要測試請將全形空白改為半形空白
* ---------------------------------------------------------- *
* 題目:一個數輸入恰好等於他的因子之和,這個數就稱為"完數"。
* 例如,6 的因子為 1,2,3 而 6=1+2+3,因此 6 是完數。
* 編程找出 1000 以內的所有完數,
* 並按下面的格式輸出: 完數:6 因子:1,2,3
* 1.類似這種問題,我曾發表過 3 篇,我把它稱之為
* 「遞迴函數的應用」
* 2.這篇我納入為第 4 篇
* 2003.12.20 朱育興 YSC E-MAIL: y5096@ms23.hinet.net
* ---------------------------------------------------------- *
M_nInputNum = 1000 && 找出多少以內的所有完數
M_nLength4InputNum = LEN(LTRIM(STR(M_nInputNum)))
FOR M1_nSUB_A = 2 TO M_nInputNum
WAIT WIND "計算中..."+LTRIM(STR(M1_nSUB_A))+"/"+LTRIM(STR(M_nInputNum)) NOWAIT
M_nNumSum = 1 && 因子之和
DIMENSION M_aFactor(1) && 所有因子(不包括本身)
M_aFactor(1) = 1
=F_TT(M1_nSUB_A,2)
IF M1_nSUB_A = M_nNumSum && 一個數恰好等於他的因子之和
=ASORT(M_aFactor)
? "完數:"+PADL(LTRIM(STR(M1_nSUB_A)),M_nLength4InputNum)
?? " 因子:"
FOR WW_SUB_A = 1 TO ALEN(M_aFactor,1)
IF WW_SUB_A != 1
?? ","
ENDIF
?? LTRIM(STR(M_aFactor(WW_SUB_A)))
ENDFOR
ENDIF
ENDFOR
WAIT CLEAR
RETURN
FUNCTION F_TT
LPARAMETERS L_nInputNum,L_nMinNum
LOCAL W1_nSUB_A
IF L_nMinNum > INT(L_nInputNum/L_nMinNum)
RETURN
ENDIF
FOR W1_nSUB_A = L_nMinNum TO INT(L_nInputNum/L_nMinNum)
IF MOD(L_nInputNum,W1_nSUB_A) = 0
IF ASCAN(M_aFactor,W1_nSUB_A) = 0
DIMENSION M_aFactor(ALEN(M_aFactor,1)+1)
M_aFactor(ALEN(M_aFactor,1)) = W1_nSUB_A
M_nNumSum = M_nNumSum + M_aFactor(ALEN(M_aFactor,1))
ENDIF
IF ASCAN(M_aFactor,INT(L_nInputNum/W1_nSUB_A)) = 0
DIMENSION M_aFactor(ALEN(M_aFactor,1)+1)
M_aFactor(ALEN(M_aFactor,1)) = INT(L_nInputNum/W1_nSUB_A)
M_nNumSum = M_nNumSum + M_aFactor(ALEN(M_aFactor,1))
ENDIF
=F_TT(L_nInputNum,W1_nSUB_A+1)
ENDIF
ENDFOR
RETURN |
|
回頂端 |
|
|
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|