1064 朋友数 (20 分)

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

解题思路:

Alice: 朋友证号好像和朋友没什么关系呀,你看每个数字的朋友证号就是它各位数字之和 啊,就算它么有朋友也是这个证号。只有两个数字的朋友证号是一样的时候,它俩才是朋友数。
Bob: 对呀,那这样求一堆数的朋友证号,就是求这些数字 各位数字之和啊。只要去重,然后再排一下序就好了。
Alice: 去重用set( ) 好了,又快又方便。排序怎么办?set 对象好像没有sort () 方法。
Bob: 用sorted( )?? 我去试一试。(1 mins later)可以的,sorted( ) 参数为集合的时候直接返回了对集合中元素排好顺序的列表。
Alice: hiahia,已经通过了。


代码:

def main():
    N = int(input())
    # 接收输入的正整数 N
    inputs = [x for x in input().split()]
    # 接收输入的N 个正整数
    answer = set()
    # 用来存储不同的朋友编号,使用set()可以直接得到不重复的朋友编号。
    for string in inputs:
        answer.add(sum([int(x) for x in string]))
        # 计算每个人的朋友编号
    answer = list(sorted(answer))
    # 对所有的朋友编号排序
    print(len(answer))
    # 输出朋友编号的数量
    print(" ".join([str(x) for x in answer]))
    # 从小到大输出所有的朋友编号


if __name__ == '__main__':
    main()


易错点:

  • 每个数字都有一个朋友证号,与其他数字无关。
  • 输出要求的是不同的朋友证号,而且是递增顺序。

总结:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值