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