蓝桥杯习题

时间:2024-03-31 19:50:37

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^{^{^{^{^{_{}^{}\textrm{}}}}}}(1<=ai<=10^{^{5}}

输出格式:

输出一个整数,表示答案

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