[Teste de máquina Huawei] Classificação de valor absoluto

descrição do tópico

Xiao Ming chegou a uma nova turma e queria classificar os alunos da turma de acordo com a diferença entre sua altura e altura. Quanto menor o valor absoluto da diferença, maior a incógnita. Se a diferença for a mesma, a de menor altura será classificada em primeiro lugar. Insira duas linhas de dados, a primeira linha indica a altura de Xiao Ming e a segunda linha indica a altura dos outros alunos da turma.
Exemplo:

Entrada: 200 [altura de Xiao Ming]
Entrada: 198 199 200 201 202
Saída: 200 199 201 198 202

responder

A ideia de resolver o problema é muito simples, basta encontrar o valor absoluto para classificar, e qualquer pessoa com uma certa base de código pode escrevê-lo.

Solução 1

public class Main {
    
    
    public static void main(String[] args) {
    
    
        Scanner in = new Scanner(System.in);
        String s1 = in.nextLine();
        String s2 = in.nextLine();
        in.close();
        String[] split1 = s1.split(" ");
        String[] split2 = s2.split(" ");
        int self = Integer.parseInt(split1[0]);
        int num = Integer.parseInt(split1[1]);
        Map<Integer, String> map = Arrays.stream(split2)
                .map(Integer::parseInt)
                .collect(Collectors.toMap(item -> Math.abs(item - self), String::valueOf, (v1, v2) -> {
    
    
                    if (Integer.parseInt(v1) > Integer.parseInt(v2)) {
    
    
                        return v2 + " " + v1;
                    } else {
    
    
                        return v1 + " " + v2;
                    }
                }));
        List<Integer> collect1 = map.keySet().stream().sorted().collect(Collectors.toList());
        StringJoiner builder = new StringJoiner(" ");
        for (Integer key : collect1) {
    
    
            builder.add(map.get(key));
        }
        System.out.println(builder);
    }
}

Solução 2

        Scanner in = new Scanner(System.in);
        String s1 = in.nextLine();
        String s2 = in.nextLine();
        in.close();
        String[] split1 = s1.split(" ");
        String[] split2 = s2.split(" ");
        int self = Integer.parseInt(split1[0]);
        int num = Integer.parseInt(split1[1]);
        String res = Arrays.stream(split2).map(Integer::parseInt).sorted((v1, v2) -> {
    
    
            int abs1 = Math.abs(v1 - self);
            int abs2 = Math.abs(v2 - self);
            if (abs1 != abs2) return abs1 - abs2;
            return v1 - v2;
        }).map(String::valueOf).collect(Collectors.joining(" "));
        System.out.println(res);

Supongo que te gusta

Origin blog.csdn.net/qq_44503987/article/details/126146637
Recomendado
Clasificación