筆者有用C++來解高中生解題系統上的 高中生程式解題系統:c032: 00382 - Perfection
(題目連結:https://zerojudge.tw/ShowProblem?problemid=c032) 一題。而筆者在解台中女中程式解題系統(Green Judge)中的「a044:盈數、虧數和完全數 -- 迴圈應用」一題,是用迴圈從判斷1到 N/2 是否為 N 的因數,若是則加總(s)。接著比較加總結果與 N的大小關係來輸出對應的訊息。(那有沒有更好的演算法呢?)
此次換用 Python 程式語言來解,演算法如下:
找出此數的所有因數。
將所有因數加總。
判斷加總與此數之間的大小關係。
Python程式碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | import sys msg = {0:"PERFECT", 1:"ABUNDANT", -1:"DEFICIENT"} def checkPerfection(n): sum = 0 for i in range(1, (n // 2) + 1, 1): if( n % i == 0 ): sum += i if( n == sum ): return 0 elif( n > sum ): return -1 elif( n < sum ): return 1 num = [] n = 1 for s in sys.stdin: tn = list(map(int,s.split())) for n in tn: if n == 0: break num.append(n) if n == 0: break print('PERFECTION OUTPUT') for n in num: ret = checkPerfection(n) print("%5d %s" % (n, msg[ret])) print('END OF OUTPUT') |
沒有留言:
張貼留言