题目:学生们按编号(1、2、3...n)标识,按身高由低到高排序,对于相同身高的学生,按体重进行由轻到重排序,对于身高和体重都一样的人,维持原编号顺序关系,请输出排序后的学生编号
输入输出描述:
输入描述:
1个正整数n (0 < n <= 100)
两个序列,每个序列由n(0 < n <= 100) 个正整数组成,一个是每个学生的身高序列,一个是每个学生的体重序列
输出描述:
排序结果序列,每个数值都是输入的原始序列中的学生编号,由1开始
示例:
输入:
8
120 110 70 180 120 150 110 165
50 65 70 66 50 78 57 62
输出:
[3, 7, 2, 1, 5, 6, 8, 4]
说明:
先按身高排序,第一个是学生编号为3的70,再是编号为2和7的110,因为身高相等,则比较体重,因编号为7的体重57小于编号为2的体重65,所以次序是[3,7,2,], 再是编号为1和5的120,因身高相等,则比较体重,体重也相等维持原编号顺序,次序变为[3,7,2,1,5,],再按身高是编号为6的159,编号为8的165,编号为4的180,最终结果是[3, 7, 2, 1, 5, 6, 8, 4]
代码(java):
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] height = new int[n];
int[] weight = new int[n];
for(int i=0;i<n;i++){
height[i] = sc.nextInt();
}
for(int i=0;i<n;i++){
weight[i] = sc.nextInt();
}
List<Student> lists = new ArrayList<>();
for (int i=0;i<n;i++) {
Student stu = new Student();
stu.id = i+1;
stu.height = height[i];
stu.weight = weight[i];
lists.add(stu);
}
lists.sort((a,b) -> {
if (a.height > b.height) {
return 1;
} else if (a.height == b.height) {
if (b.weight > a.weight) {
return -1;
} else {
return 1; // 不变换顺序
}
} else {
return -1;
}
});
int[] res = new int[n];
for(int i=0;i<lists.size();i++){
res[i] = lists.get(i).id; //获取学生id排序
}
System.out.println(Arrays.toString(res));
}
static class Student{
int id;
int height;
int weight;
Student() {}
}
}