阿摩線上測驗 登入

申論題資訊

試卷:109年 - 109 地方政府特種考試_三等_資訊處理:程式設計#94936
科目:程式設計
年份:109年
排序:0

申論題內容

四、請使用 Java、C、C++、C#或 Python 撰寫相關模組程式,可以找出某一 整數的所有 generator(s)。 digit-sum:正整數 N 的 digit-sum 定義為「該正整數本身跟構成該整數個別數字的總和」 ,如245的 digit-sum 為256,因為245+2+4+5等於256 generator:正整數 M 是正整數 N 的 digit-sum 時,則 N 為 M 的 generator 
如245是256的 generator 
如1979是2005的 generator,因為1979+1+9+7+9等於2005 
如198及207皆是216的 generator,而198是216最小的 generator 
*模組程式應能接受使用者由標準輸入裝置所輸入的資料 
*模組程式中應控制使用者輸入資料的正確性與合法性,如輸入資料非 正整數,程式應顯示輸入資料不正確的訊息,然後結束程式 *輸入資料無誤,執行程式後,應顯示該輸入資料的所有 generator(s)

詳解 (共 1 筆)

詳解 提供者:hchungw
def digit_sum(n):
    """計算並返回正整數 n 的 digit-sum。"""
    return n + sum(int(digit) for digit in str(n))
def find_generators(target):
    """找出並返回目標數字的所有 generators。"""
    generators = []
    # 理論上,一個數字的 generator 最大不會超過該數字本身,
    # 而最小的 generator 至少比目標數小9倍其位數,
    # 因為最大單位位數加總為9*位數(例如,99的位數加總為18)。
    start = max(1, target - 9*len(str(target)))
    for i in range(start, target):
        if digit_sum(i) == target:
            generators.append(i)
    return generators
def main():
    try:
        n = int(input("請輸入一個正整數: "))
        if n <= 0:
            raise ValueError
    except ValueError:
        print("輸入資料不正確,請輸入一個正整數。")
        return
    
    generators = find_generators(n)
    if generators:
        print(f"{n} 的 generator(s) 為: {', '.join(map(str, generators))}")
    else:
        print(f"{n} 沒有任何 generator。")
if __name__ == "__main__":
    main()
程式說明
digit_sum 函數:計算給定整數的 digit-sum。
find_generators 函數:尋找並返回一個正整數的所有 generator。這個函數通過遍歷從 1 到目標數字之間的所有數字來尋找可能的 generator,並計算其 digit-sum,以判斷它們是否等於目標數字。
main 函數:從標準輸入讀取一個正整數,驗證輸入的正確性,並顯示該數字的所有 generator。如果輸入不是一個正整數,則顯示錯誤消息並結束程式。
此程式在計算 generator 時考慮了性能優化,通過限制搜索範圍來減少不必要的計算。例如,一個數字的所有可能 generator 最大不會超過該數字本身,並且至少要小於或等於該數字減去其位數乘以9(考慮到每位最大的數字是9)。