按身高体重排序

题目:学生们按编号(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() {}

    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值