https://www.lanqiao.cn/problems/1265/learning/
第一题---排序
给定一个长度为N的数组A,请你先从小到大输出它的每个元素,再从大到小输出他的每个元素。
输入描述:
第一行包含一个整数N
第二行包含N个整数a1,a2,a3,...an,表示数组A的元素
输出描述:
输出共两行,每行包含N个整数,表示答案。
示例:5 1 2 3 5 6
1 3 2 6 5 6 5 3 2 1
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
Integer []arr = new Integer[n];
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
Arrays.sort(arr);
for(int x:arr){
System.out.print(x + " ");
}
System.out.println();
Arrays.sort(arr, (o1, o2) -> o2 - o1);
for(int x:arr){
System.out.print(x + " ");
}
}
第二题---拼数
给定n个正整数a1,a2,a3,...an,你可以将它们任意排序。现要将这n个数字连接成一排,即令相邻数字首尾相接,组成一个数。问,这个数最大可以是多少?
输入格式:
第一行输入一个正整数n(1<=n<=20)
第二行输入n个正整数a1,a2,a3,...,an(1<=ai<=)
输出格式:
输出一个整数,表示答案
示例:3
13 312 343 34331213
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String []str = new String[n];
for (int i = 0; i < n; i++) {
str[i] = sc.next();
}
Arrays.sort(str,(o1,o2) -> (o2+o1).compareTo(o1+o2));
StringBuilder str1 = new StringBuilder();
for(String x:str){
str1.append(x);
}
System.out.println(str1);
}
第三题:数位排序
https://www.lanqiao.cn/problems/2122/learning/
小蓝对一个数的数位之和很感兴趣,今天他要按照数位之和给数排序。当两个数各个数位之和不同时,将数位和较小的排在前面,当数位之和相等时,将数值小的排在前面。
例如,2022排在409前面,因为2022的数位之和是6,小于409的数位之和13。
又如,6排在2022前面,因为 他们的数位之和相同,而6小于2022。
给定正整数n,m,请问对1到n采用这种方法排序时,排在第m个的元素是多少?
输入格式:
输入第一行包含一个正整数n
第二行包含一个正整数m
输出格式
输出一行包含一个整数,表示答案。
示例:13
5 3
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
//f[i][0]表示数值大小,f[i][1]表示数位和大小
int [][]f = new int [n][2];
for (int i = 0; i < n; i++) {
f[i][0] = i+1;
String x = f[i][0]+"";
for (int j = 0; j < x.length(); j++) {
f[i][1] += x.charAt(j) - '0';
}
}
Arrays.sort(f,(o1, o2) ->o1[1] == o2[1]?o1[0]-o2[0]:o1[1]-o2[1]);
System.out.print(f[m-1][0]);
}
}