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

猜你喜欢

转载自www.cnblogs.com/qq188380780/p/11508550.html