题目链接:1.数位排序 - 蓝桥云课 (lanqiao.cn)
package lanqiao;
import java.util.Arrays;
import java.util.Scanner;
/**
* 2023/11/1
* 蓝桥2122
* 数位和排序,数位和相等的按大小排序
*/
public class lanqiao2122_数位排序 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int m = scan.nextInt();
int[][] arr = new int[n][2];//定义二维数组,0表示数值,1表示数位和
for (int i = 0; i < arr.length; i++) {
arr[i][0] = i + 1;
String s = arr[i][0] + "";//强转成String,方便进行数位加和运算
for (int j = 0; j < s.length(); j++) {
arr[i][1] += s.charAt(j) - '0';//求数位和,一定要减‘0’,这样求出的才是数字
}
}
//lambda表达式:先判断数位和是否相等,不相等数位和小的在前面;相等比较数字大小,数字小的在前面
Arrays.sort(arr, (o1, o2) -> o1[1] == o2[1] ? o1[0] - o2[0] : o1[1] - o2[1]);
/* 此处为输出排序后的数组,验证结果是否正确
System.out.println("排序后的数组为");
for (int i=0;i<n;i++)
System.out.print(Arrays.toString(arr[i]) +" ");
System.out.println();
System.out.println();
*/
System.out.println("排在第" + m + "位的是" + arr[m - 1][0]);//因为索引从0开始,所以要找的位置要减一才是它的索引
}
}
13
5
排序后的数组为
[1, 1] [10, 1] [2, 2] [11, 2] [3, 3] [12, 3] [4, 4] [13, 4] [5, 5] [6, 6] [7, 7] [8, 8] [9, 9]
排在第5位的是3
进程已结束,退出代码为 0