Python老王在一个“胖子健身俱乐部“,每到月底老王就很担心,因为每个月都会公布一份成员体重列表,每个月他都是列表中的最后一个,这意味着他是最重的。于是他就建议会长修改规则,新的规则如下:

题目

老王在一个 " 胖子健身俱乐部 " ,每到月底老王就很担心,因 为每个月都会公布一份成员体重列表,每个月他都是列表中的最后一个,这意味着他是最重的。于是他就建议会长修改规则,新的规 则如下:新的排序规则将是按照“ 权重 来进行排序,如果权重相同,则按照重字符串来进行排序。( 权重的计算规则 : 体重数字不同位数上的数字的总和)
给定某种正常顺序俱乐部的成员的体重字符串,如何实现按照新规则排序呢?测试用例: 输入 : "99 189 86 75" 输出 : "75 86 189 99"

方法

1、直接用input函数输入,中间用空格隔开,用str.split()函数按空格将其分割放入列表。比用for循环输入简单太多。

2、用冒泡排序的方法将权重从小到大排序,体重也将其按权重交换的顺序交换。得到与权重一 一相对的体重列表。

3、用冒泡排序的方法再将权重相等的体重按照字符串来排序。再输出就好了。

提示

如果冒泡排序不会,就来看看这个链接吧。

http://t.csdn.cn/CKOEn

代码

s=input("输入俱乐部成员的体重:")#直接输入体重,中间用空格隔开
s=s.split()#用str.split()函数将输入的体重以字符串的形式放入列表中
s1=[]
for i in s:#计算每一个体重的“权重”按顺序放入一个列表中
    i=int(i)
    t=0
    while i>0:
        t=t+i%10
        i=i//10
    s1.append(t)
#这个时候得到了一个和体重列表(s这个列表)一一相对的权重列表(s1这个列表)
s3=len(s)#计算列表的长度
'''
接下来用冒泡排序的方法得到一个权重从小到大的排列列表,
同时将体重列表也根据权重的交换顺序进行交换,这样体重的列表
和权重的列表又一一相对
'''
for i in range(s3-1):
    for j in range(s3-1-i):
        s1[j]=int(s1[j])#字符串无法比较大小需要转换成整形
        s1[j+1]=int(s1[j+1])
        if s1[j]>s1[j+1]:
            s1[j] = str(s1[j])#再将其转换成字符串放入列表
            s1[j + 1] = str(s1[j + 1])
            s1[j],s1[j+1]=s1[j+1],s1[j]#权重交换顺序
            s[j],s[j+1]=s[j+1],s[j]#体重也交换顺序
        else:
            s1[j] = str(s1[j])#由于一些不满足if条件,前面将其转换成了整形,现在将其转换成字符串
            s1[j + 1] = str(s1[j + 1])
s7=0
a=0
while s7<s3:#判断循环次数
    s4 = s1.count(s1[s7])#得到一个列表元素出现的次数
    if s4>1:#如果出现次数超过两次就需要按照体重字符串来进行排序
        s5=s1.index(s1[s7])#得到这个元素第一次出现的位置
#再次进行冒泡排序,对象是体重列表,但是是按照体重字符串来进行排序
        for b in range(s4 - 1):
            s5 =s5-a
            for j in range(s4 - 1 - b):
                if s[s5] > s[s5 + 1]:#从第一次出现这个元素的位置进行判断排序
                    s[s5], s[s5 + 1] = s[s5 + 1], s[s5]
                s5 = s5 + 1
                a=a+1#用这个a得到累加次数,控制s5回到第一次出现该元素的位置
    s7=s7+s4#控制while循环,直接跳过剩余重复元素,到下一个元素
for i in s:
    print(int(i),end=" ")

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花子喵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值