7-4 平方和排序

输入int类型范围内的N个非负整数,要求按各个整数的各数位上数字的平方和从小到大排序,若平方和相等则按数值从小到大排序。
例如,三个整数9、31、13各数位上数字的平方和分别为81、10、10,则排序结果为13、31、9。

输入格式:

测试数据有多组。每组数据先输入一个整数N(0<N<100),然后输入N个非负整数。若N=0,则表示输入结束。

输出格式:

对于每组测试,在一行上输出按要求排序后的结果,数据之间留一个空格。

输入样例:

9
12 567 91 33 657 812 2221 3 77
5
1 3 11 33 9
0

输出样例:

12 3 2221 33 812 91 77 567 657
1 11 3 33 9

代码实现:

import functools
def cul(a):
    b = str(a)
    cnt = 0
    for i in b:
        cnt += pow(int(i), 2)
    return cnt

def cmp(a,b):
    if cul(a)>cul(b):
        return 1
    elif cul(a)<cul(b):
        return -1
    else:
        return 0

while True:
    N = int(input())
    if N == 0:
        break
    else:
        mylist = list(map(int, input().split()))
        mylist.sort()
        mylist = sorted(mylist, key=functools.cmp_to_key(cmp))
        print(' '.join(str(i) for i in mylist))

心得:

原本用字典写的,键是输入的数字,值是平方和,但是一直报错,后来发现是因为题目并没有说输入的数不可重复。下面附上之前写的版本(写都写了可不能白写

def cul(a):
    b = str(a)
    cnt = 0
    for i in b:
        cnt += pow(int(i), 2)
    return cnt

 while True:
     N = int(input())
     if N == 0:
         break
     else:
         mydict = {}
         mylist = list(map(int, input().split()))
         mylist.sort()
         for i in mylist:
             mydict[i] = cul(i)
         newlist = sorted(mydict.items(), key = lambda x:x[1])
         newdict = {k:v for k, v in newlist}
         print(newdict)
         print(' '.join(str(i) for i in newdict.keys()))

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值