返回目录

题目描述

某学校举行运动会,学生们按编号(1、2、3…n)进行标识,现需要按照身高由低到高排列,
对身高相同的人,按体重由轻到重排列;
对于身高体重都相同的人,维持原有的编号顺序关系。请输出排列后的学生编号。

输入描述

两个序列,每个序列由n个正整数组成(0 < n <= 100)。

第一个序列中的数值代表身高,第二个序列中的数值代表体重。

输出描述

排列结果,每个数值都是原始序列中的学生编号,编号从1开始

示例:

输入4
100 100 120 130
2 1 3 4
输出2 1 3 4
说明输出的第一个数字2表示此人原始编号为2,即身高为100,体重为30的这个人。

Python算法源码

# 输入人数
n = int(input())
# 输入身高和体重
heights = [int(x) for x in input().split()]
weights = [int(x) for x in input().split()]

# 定义人的编号
persons = [i + 1 for i in range(n)]

# 按照身高和体重排序
persons.sort(key=lambda x: (heights[x-1], weights[x-1]))

# 输出人的编号
print(*persons)

C算法源码

#include <stdio.h>
#include <stdlib.h>

// 定义一个结构体,用于存储每个人的信息
typedef struct {
    int height;
    int weight;
    int index; // 人的编号
} Person;

// 比较函数
int compare(const void *a, const void *b) {
    Person *personA = (Person *)a;
    Person *personB = (Person *)b;
    // 首先比较身高
    if (personA->height == personB->height) {
        // 身高相同则比较体重
        return personA->weight - personB->weight;
    }
    return personA->height - personB->height;
}

int main() {
    int n;
    scanf("%d", &n);

    Person persons[n];

    // 输入身高和体重信息,并初始化编号
    for (int i = 0; i < n; i++) {
        scanf("%d", &persons[i].height);
        persons[i].index = i + 1; // 编号从1开始
    }

    for (int i = 0; i < n; i++) {
        scanf("%d", &persons[i].weight);
    }

    // 使用 qsort 进行排序
    qsort(persons, n, sizeof(Person), compare);

    // 输出排序后的编号
    for (int i = 0; i < n; i++) {
        printf("%d ", persons[i].index);
    }
    printf("\n");

    return 0;
}

Java算法源码

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // 定义变量
        int n;
        Scanner scanner = new Scanner(System.in);
        n = scanner.nextInt();
        int[] heights = new int[n];
        int[] weights = new int[n];

        // 输入身高
        for (int i = 0; i < n; i++) {
            heights[i] = scanner.nextInt();
        }

        // 输入体重
        for (int i = 0; i < n; i++) {
            weights[i] = scanner.nextInt();
        }

        // 定义人的数组
        Integer[] persons = new Integer[n];
        // 初始化人的编号
        for (int i = 0; i < n; i++) {
            persons[i] = i + 1;
        }

        // 按照身高和体重排序
        Arrays.sort(persons, (a, b) -> {
            if (heights[a - 1] == heights[b - 1]) {
                return weights[a - 1] - weights[b - 1];
            } else {
                return heights[a - 1] - heights[b - 1];
            }
        });

        // 输出人的编号
        for (int i = 0; i < n; i++) {
            System.out.print(persons[i] + " ");
        }
        System.out.println();
    }
}
最后修改:2024 年 04 月 03 日
如果觉得我的文章对你有用,请随意赞赏