返回目录
题目描述
某学校举行运动会,学生们按编号(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();
}
}
3 条评论
[...]2024 C卷 100分序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆7围棋的气逻辑分析☆☆☆8分割平衡字符串逻辑分析☆☆☆9机器人搬砖二分法☆☆☆10转盘寿司数据结构/栈/单调栈☆☆☆11小明找位置二分法☆☆☆12提取字符串的最长合法简单数学表达式双指[...]
[...]2024 C卷 100分序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆7围棋的气逻辑分析☆☆☆8分割平衡字符串逻辑分析☆☆☆9机器人搬砖二分法☆☆☆10转盘寿司数据结构/栈/单调栈☆☆☆11小明找位置二分法☆☆☆12提取字符串的最长合法简单数学表达式双指[...]
[...]2024 C卷 100分序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆7围棋的气逻辑分析☆☆☆8分割平衡字符串逻辑分析☆☆☆9机器人搬砖二分法☆☆☆10转盘寿司数据结构/栈/单调栈☆☆☆11小明找位置二分法☆☆☆12提取字符串的最长合法简单数学表达式双指[...]