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]);
- }
- }