1. 程式人生 > >1064 朋友數 Python實現

1064 朋友數 Python實現

1064 朋友數 (20 分)

如果兩個整數各位數字的和是一樣的,則被稱為是“朋友數”,而那個公共的和就是它們的“朋友證號”。例如 123 和 51 就是朋友數,因為 1+2+3 = 5+1 = 6,而 6 就是它們的朋友證號。給定一些整數,要求你統計一下它們中有多少個不同的朋友證號。

輸入格式:

輸入第一行給出正整數 N。隨後一行給出 N 個正整數,數字間以空格分隔。題目保證所有數字小於 10​4​​。

輸出格式:

首先第一行輸出給定數字中不同的朋友證號的個數;隨後一行按遞增順序輸出這些朋友證號,數字間隔一個空格,且行末不得有多餘空格。

輸入樣例:

8
123 899 51 998 27 33 36 12

輸出樣例:

4
3 6 9 26

問題分析:難點在於分離整數的各位數字,以及最後的排序。但是因為Python沒有資料型別定義,input的所有輸入視為字串的輸入 ,所以沒有整數分離問題,排序有sort()方法,所以這道題是十分簡單的。

程式:

n = int(input())
a = input().split()
sum1 = []
for i in a:
    b = 0
    for j in i:
        b+=int(j)
    if b not in sum1:
        sum1.append(b)
sum1.sort()
print(len(sum1))
sum1 = map(str,sum1)
print(" ".join(sum1))

程式中if b not in sum1將重複的朋友數排除

map()函式的用法:map(function,items),它將items序列中的元素逐個呼叫方法function,將結果作為新的序列返回。function引數是一個方法名。例如程式中的map(str,sum1),str()函式是將數字轉換為字串,所以sum1 = map(str,sum1)是將原sum1中的整數序列,轉換為對應的字串序列。其意義是方便之後在輸出之間新增空格,如果用for迴圈新增空格,最後一個空格需要新增判斷,時間效率低。而join方法,使用簡便且時間效率高。