直接穷举,只有16个进行转换
import java.util.*; public class Main{ public static void main(String [] args){ getString(); } public static void getString(){ Scanner scan = new Scanner(System.in); while(scan.hasNext()){ String input = scan.nextLine().replace(" ", ""); int len = input.length(); int len1 = input.length()/2; int len2 = input.length()/2; if(len%2!=0){ len1 += 1; } String [] str1 = new String[len1]; String [] str2 = new String[len2]; // 分别对奇数行偶数行排序 for(int i = 0; i < len; i++){ if(i % 2 == 0){ str1[i/2] = input.substring(i, i+1); }else{ str2[(i-1)/2] = input.substring(i, i+1); } } Arrays.sort(str1); Arrays.sort(str2); for(int i = 0; i < len1; i++){ System.out.print(getChar(str1[i])); if(i < len2){ System.out.print(getChar(str2[i])); } } System.out.println(""); } } // 16进制转换 public static String getChar(String input){ String temp = input.toUpperCase(); switch(temp){ case "F" :return "F"; case "E" :return "7"; case "D" :return "B"; case "C" :return "3"; case "B" :return "D"; case "A" :return "5"; case "9" :return "9"; case "8" :return "1"; case "7" :return "E"; case "6" :return "6"; case "5" :return "A"; case "4" :return "2"; case "3" :return "C"; case "2" :return "4"; case "1" :return "8"; case "0" :return "0"; default:return input; } /* 1111 == 1111 F = F 1110 == 0111 E = 7 1101 == 1011 D = B 1100 == 0011 C = 3 1011 == 1101 B = D 1010 == 0101 A = 5 1001 == 1001 9 = 9 1000 == 0001 8 = 1 0111 == 1110 7 = E 0110 == 0110 6 = 6 0101 == 1010 5 = A 0100 == 0010 4 = 2 0011 == 1100 3 = C 0010 == 0100 2 = 4 0001 == 1000 1 = 8 0000 == 0000 0 = 0*/ } }