2020校招笔试
未知题目
题目描述
将字符 A ~ Z,对应记为数字 1 ~ 26,对任意字符串 X (由 A ~ Z 组成),可将 X 种每个字符对应的数字计算出平均值 N
如 X = "ABC",N = 2,并可得到字符"A"与 N 的绝对差为 1,"B"与 N 的绝对差为 0,"C" 与 N 的绝对差为 1.
请编写程序,对输入的任何字符串 X (由 A ~ Z组成),计算 X 中,各字符的绝对差,并按绝对由大到小顺序重新输出字符串。
样例输入
BFRTSG
样例输出
BTSFRG
说明: N = (2+6+18+20+19+7)/6 = 12
则BFRTSG分别为10、6、6、8、7、5
编码
import java.util.*;
public class Main {
private static class Num implements Comparable<Num>{
char c;
int val;
Num(char c, int val){
this.c = c;
this.val = val;
}
@Override
public int compareTo(Num num) {
return num.val - this.val;
}
}
public static void main(String[] args) {
Scanner scn = new Scanner(System.in);
List<Num> list = new ArrayList<>();
String str = scn.next();
int sum = 0;
for(int i = 0; i < str.length(); ++i) {
sum += str.charAt(i)-'A'+1;
}
sum /= str.length();
for(int i = 0; i < str.length(); ++i) {
char tmp = str.charAt(i);
list.add(new Num(tmp, Math.abs(tmp-'A'+1-sum)));
}
Collections.sort(list);
for(Num num : list) {
System.out.print(num.c);
}
System.out.println();
}
}