2024华为OD机试题库-(C卷+D卷)-(JAVA、Python、C++)
题目描述:
某学校举行运动会,学生们按编号(1、2、3…n)进行标识,现需要按照身高由低到高排列,
对身高相同的人,按体重由轻到重排列;
对于身高体重都相同的人,维持原有的编号顺序关系。请输出排列后的学生编号。
输入描述:
两个序列,每个序列由n个正整数组成(0 < n <= 100)。
第一个序列中的数值代表身高,第二个序列中的数值代表体重。。
输出描述:
排列结果,每个数值都是原始序列中的学生编号,编号从1开始,
身高从低到高,身高相同体重从轻到重,体重相同维持原来顺序。
示例 1:
输入
4
100 100 120 130
40 30 60 50
输出
2 1 3 4
示例 2:
输入
3
90 110 90
45 60 45
输出
1 3 2
解题思路
1.将每人的序号,身高,体重存入一个二维数组中
2.按照每人的身高进行升序排序,如果身高相同,按体重升序排序
考点
自定义排序
代码
c++
#include <iostream>
#include <sstream>
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <math.h>
#include <algorithm>
#include <vector>
using namespace std;
bool cmp(vector<int> a, vector<int> b) {
if(a[1]==b[1]) {
return a[2]<b[2];
}else{
return a[1]<b[1];
}
}
int main() {
int N;
cin>>N;
vector<int> h(N), w(N);
for(int i=0;i<N;i++) {
cin>>h[i];
}
for(int i=0;i<N;i++) {
cin>>w[i];
}
vector<vector<int>> arr;
for(int i=0;i<N;i++) {
arr.push_back({i+1,h[i],w[i]});
}