  | 
				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 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
  	 
	    
  	   | 
 	
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
  | 
   
  
		 |