当前位置:   article > 正文

多级排序编程题_职员的编号从1到n。 输入的第一行包含数字n(1≤n≤6000)。 后一行包含 n 个整数,

职员的编号从1到n。 输入的第一行包含数字n(1≤n≤6000)。 后一行包含 n 个整数,

某公司要针对员工情况统一调薪,现有一个员工列表,包含姓名、职级、工作年限、工资信息。现要求将该列表按以下规则重新排序:

1、职级高的排在前面

2、若职级相同,按工资少的排前面

3、若工资相同,工作年限长的排前面

输入描述:

第一行输入一个整数n,表示员工列表中员工的人数

接下来的n行,分别输入员工的姓名、职级、工作年限和工资信息,各项信息用空格分隔

输出描述:

输出按要求重新排列的员工列表,每名员工信息(姓名、职级、工作年限和工资)占一行

示例

输入:

6
张三 3 3 3000
李四 3 4 3000
王五 3 3 4000
赵六 4 3 3000
陆奇 4 4 4000
闫八 4 4 3980.99 

输出: 

赵六 4 3 3000.00
闫八 4 4 3980.99
陆奇 4 4 4000.00
李四 3 4 3000.00
张三 3 3 3000.00
王五 3 3 4000.00 

方法一:

  1. n = int(input())
  2. emps = [[emp[0],int(emp[1]),int(emp[2]),float(emp[3])] for emp in
  3. (input().strip().split(" ") for i in range(n))]
  4. emps=sorted(emps,key=lambda x:(x[1],-x[3],x[2]), reverse=True)
  5. for emp in emps:print("{} {} {} {:.2f}".format(*emp))

 方法二:

  1. import sys
  2. lines=sys.stdin.readlines()
  3. n=int(lines[0].strip())
  4. emps=[]
  5. for i in range(n):
  6. tmp=lines[i+1].strip().split(" ")
  7. tmp[0]=tmp[0].strip()
  8. tmp[1]=int(tmp[1])
  9. tmp[2]=int(tmp[2])
  10. tmp[3]=-float(tmp[3])
  11. emps.append(tmp)
  12. emps=sorted(emps,key=lambda x:(x[1],x[3],x[2]), reverse=True)
  13. for emp in emps:
  14. emp[-1]=-emp[-1]
  15. print("{} {} {} {:.2f}".format(*emp))

方法三:

  1. n = int(input())
  2. emps = [[emp[0],int(emp[1]),int(emp[2]),float(emp[3])] for emp in
  3. (input().strip().split(" ") for i in range(n))]
  4. #基数排序
  5. result = sorted(emps, key=lambda x: -x[2])
  6. result = sorted(result, key=lambda x: x[3])
  7. emps = sorted(result, key=lambda x: -x[1])
  8. for emp in emps:print("{} {} {} {:.2f}".format(*emp))

方法四:

  1. n = int(input())
  2. emps = [[emp[0],int(emp[1]),int(emp[2]),float(emp[3])] for emp in
  3. (input().strip().split(" ") for i in range(n))]
  4. for i in range(n):
  5. for j in range(n-i-1):
  6. if emps[j+1][1]<emps[j][1]:
  7. continue
  8. elif emps[j+1][1]>emps[j][1]:
  9. emps[j], emps[j+1] = emps[j+1], emps[j]
  10. else:
  11. if float(emps[j+1][3])>float(emps[j][3]):
  12. continue
  13. elif float(emps[j+1][3])<float(emps[j][3]):
  14. emps[j], emps[j+1] = emps[j+1], emps[j]
  15. else:
  16. if int(emps[j+1][2])>int(emps[j][2]):
  17. emps[j], emps[j+1] = emps[j+1], emps[j]
  18. else:
  19. continue
  20. for emp in emps:print("{} {} {} {:.2f}".format(*emp))

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/521554
推荐阅读
相关标签
  

闽ICP备14008679号