当前位置:   article > 正文

按身高体重排队_100分_A/B复用卷_排序

按身高体重排队_100分_A/B复用卷_排序

按身高体重排队

题目描述:

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

输入输出描述:

输入描述:

  两个序列,每个序列由 n 个正整数组成(0 < n <= 100)。第一个序列中的数值代表身高,第二个序列中的数值代表体重。

输出描述:

  排列结果,每个数值都是原始序列中的学生编号,编号从1开始,身高从低到高,身高相同体重从轻到重,体重相同维持原来顺序。

示例1:

输入:
	4
	100 100 120 130
	40 30 60 50
输出:
	2 1 3 4
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

示例 2:

输入:
	3
	90 110 90
	45 60 45
输出:
	1 3 2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

解题思路:

按照题目意思,参与排序的指标有三个,将这三个指标组合成一个数组。利用排序函数进行排序即可

代码:

public static void main(String[] args) {
	Scanner scanner = new Scanner(System.in);
	int n = Integer.parseInt(scanner.nextLine());
	String[] height = scanner.nextLine().split(" ");
	String[] weight = scanner.nextLine().split(" ");
	int[][] nums = new int[n][3];

	//处理输入
	for (int i = 0; i < n; i++) {
		// 记录每个学生的身高、体重和学号
		nums[i] = new int[] {Integer.parseInt(height[i]), Integer.parseInt(weight[i]), i + 1};
	}
	
	// 排序
	Arrays.sort(nums, (a,b)->{
		if (a[0] != b[0]) {
			return a[0] - b[0];
		} else if (a[1] != b[1]) {
			return a[1] - b[1];
		} else {
			return a[2] - b[2];
		}
	});

	// 输出
	for (int i = 0; i < n - 1; i++) {
		System.out.print(nums[i][2] + " ");
	}
	System.out.print(nums[n - 1][2]);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/442109
推荐阅读
相关标签
  

闽ICP备14008679号