VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

遞迴函數的應用4--找出 N 以內的所有完數

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
朱育興



註冊時間: 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
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 MSN Messenger
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作