1064 朋友數 Python實現
阿新 • • 發佈:2018-12-17
1064 朋友數 (20 分)
如果兩個整數各位數字的和是一樣的,則被稱為是“朋友數”,而那個公共的和就是它們的“朋友證號”。例如 123 和 51 就是朋友數,因為 1+2+3 = 5+1 = 6,而 6 就是它們的朋友證號。給定一些整數,要求你統計一下它們中有多少個不同的朋友證號。
輸入格式:
輸入第一行給出正整數 N。隨後一行給出 N 個正整數,數字間以空格分隔。題目保證所有數字小於 104。
輸出格式:
首先第一行輸出給定數字中不同的朋友證號的個數;隨後一行按遞增順序輸出這些朋友證號,數字間隔一個空格,且行末不得有多餘空格。
輸入樣例:
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方法,使用簡便且時間效率高。