题目
老王在一个
"
胖子健身俱乐部
"
,每到月底老王就很担心,因 为每个月都会公布一份成员体重列表,每个月他都是列表中的最后一个,这意味着他是最重的。于是他就建议会长修改规则,新的规
则如下:新的排序规则将是按照“
权重
”
来进行排序,如果权重相同,则按照重字符串来进行排序。(
权重的计算规则
:
体重数字不同位数上的数字的总和)
给定某种正常顺序俱乐部的成员的体重字符串,如何实现按照新规则排序呢?测试用例:
输入
: "99 189 86 75"
输出
: "75 86 189 99"
。
方法
1、直接用input函数输入,中间用空格隔开,用str.split()函数按空格将其分割放入列表。比用for循环输入简单太多。
2、用冒泡排序的方法将权重从小到大排序,体重也将其按权重交换的顺序交换。得到与权重一 一相对的体重列表。
3、用冒泡排序的方法再将权重相等的体重按照字符串来排序。再输出就好了。
提示
如果冒泡排序不会,就来看看这个链接吧。
代码
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=" ")