在一行上输入两个长度
,由大小写字母和数字构成的字符串
和
,代表待处理的字符串。
输出处理后的最终字符串。
dec fab
5D37BF
在这个样例中,全过程描述如下:
【合并阶段】
第一步合并得到
;
第二步排序得到
。
【调整阶段】
对于第一个字符
,其十进制数为
,二进制数为
,翻转后得到
,再转换回十六进制数为
;
第二个字符
,翻转
;
第三个字符
,翻转
;
第四个字符
,翻转
;
第五个字符
,翻转
;
第六个字符
,翻转
。
abV CDw
B3VD5w
在这个样例中,全过程描述如下:
【合并阶段】
第一步合并得到
;
第二步排序得到
。
【调整阶段】
对于第一个字符
,其十进制数为
,二进制数为
,翻转后得到
;
第二个字符
,翻转
;
第三个字符
,跳过该字符;
第四个字符
,翻转
;
第五个字符
,翻转
;
第六个字符
,跳过该字符。
123 15
88C4A
在这个样例中,全过程描述如下:
【合并阶段】
第一步合并得到
;
第二步排序得到
。
【调整阶段】
对于第一、二个字符
,其十进制数为
,二进制数为
,翻转后得到
,再转换回十六进制数为
;
第三个字符
,翻转
;
第四个字符
,翻转
;
第五个字符
,翻转
。
本题已于下方时间节点更新,请注意题解时效性:
1. 2025-05-15 更新题面。
2. 2024-12-14 更新题面。
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { //16转10的map映射 private static Map<Character, Integer> map16_10 = new HashMap<Character, Integer>() { { put('A', 10); put('B', 11); put('C', 12); put('D', 13); put('E', 14); put('F', 15); put('a', 10); put('b', 11); put('c', 12); put('d', 13); put('e', 14); put('f', 15); } }; public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextLine()) { // 注意 while 处理多个 case String a = in.nextLine();//输入字符串 a = a.replace(" ", ""); //将字符串中的空格去除 char[] arrA = a.toCharArray();//转为char数组 int n = arrA.length; //分别放入单数List和双数List,然后进行排序 List<Character> oddList = new ArrayList<>(); List<Character> evenList = new ArrayList<>(); for (int i = 1; i <= n ; i++) { if (i % 2 == 0) { evenList.add(arrA[i - 1]); } else { oddList.add(arrA[i - 1]); } } //分别进行排序 oddList.sort(Comparator.naturalOrder()); evenList.sort(Comparator.naturalOrder()); //将排序后的字符串取出 StringBuilder sb = new StringBuilder(); int odd = 0; int even = 0; for (int i = 1; i <= n ; i++) { if (i % 2 == 0) { sb.append(evenList.get(even)); even++; } else { sb.append(oddList.get(even)); odd++; } } StringBuilder result = new StringBuilder(); //进行转换 for (char c : sb.toString().toCharArray()) { char temp = c; //先判断是不是合法的16进制字符,合法则转换,不合法则直接追加 if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f')) { temp = change(c); } result.append(temp);//追加c到结果 } //输出结果 System.out.println(result.toString() ); } } //转换 private static char change(char c) { //1、十六进制转换为十进制 int n ; if (Character.isDigit(c)) { n = Character.getNumericValue(c);//如果是数字,则直接转换为数字 } else { n = map16_10.get(c) ; //非数字则通过map映射获取值 } //2、将十进制转换为二进制 String binary = Integer.toBinaryString(n); while (binary.length() % 4 != 0) { //不足4位的需要补0 binary = "0" + binary; } //3、将二进制进行翻转 StringBuilder sb = new StringBuilder(); //先翻转字符串 for (int i = binary.length() - 1 ; i >= 0; i--) { sb.append(binary.toCharArray()[i]); } //4、将二进制转换为十六进制:先转十进制,再将十进制转为十六进制 //将翻转后的字符串转为十进制的int类型 int reverse = Integer.parseInt(sb.toString(), 2); //将十进制再转为十六进制,并转为大写 String hex = Integer.toHexString(reverse).toUpperCase(); char[] arr = hex.toCharArray();//直接输出 if (arr.length == 1) { return arr[0];//一般只有一位,直接输出一位 } return c;//兜底输出 } }
import java.util.Scanner; import java.util.Arrays; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { String str = scanner.next() + scanner.next(); int oddsLength = str.length() / 2; int evensLength = str.length() % 2 == 0 ? str.length() / 2 : str.length() / 2 + 1; char[] odds = new char[oddsLength]; char[] evens = new char[evensLength]; int i1 = 0, i2 = 0; for (int i = 0; i < str.length(); i++) { if (i % 2 == 0) { evens[i1++] = str.charAt(i); } else { odds[i2++] = str.charAt(i); } } Arrays.sort(odds); Arrays.sort(evens); StringBuffer buffer = new StringBuffer(); i1=0;i2=0; for (int i = 0; i < str.length(); i++) { if (i % 2 == 0) { buffer.append(evens[i1++]); } else { buffer.append(odds[i2++]); } } StringBuffer result = new StringBuffer(); for(int i = 0; i<buffer.length(); i++) { int t=-1; char c = buffer.charAt(i); if (c >='0' && c <='9'){ t = c-'0'; }else if (c >='A' && c <='F'){ t = c-'A'+10; }else if (c >='a' && c <='f'){ t = c-'a'+10; } if (t!=-1){ String s = Integer.toBinaryString(t); while (s.length()<4){ s = '0'+s; } s = new StringBuffer(s).reverse().toString(); result.append(Integer.toHexString(Integer.parseInt(s, 2)).toUpperCase()); }else{ result.append(buffer.charAt(i)); } } System.out.println(result.toString()); } } }
import java.util.Scanner; import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNextLine()) { String line = sc.nextLine(); String[] arr = line.split(" "); String str = arr[0] + arr[1]; List<Character> o = new ArrayList<>(); List<Character> j = new ArrayList<>(); for (int i = 0; i < str.length(); i++) { if (i % 2 == 0) { o.add(str.charAt(i)); } else { j.add(str.charAt(i)); } } Collections.sort(o); Collections.sort(j); Queue<Character> oq = new ArrayDeque<>(o); Queue<Character> jq = new ArrayDeque<>(j); StringBuilder sb = new StringBuilder(); for (int i = 0; i < str.length(); i++) { if (i % 2 == 0) { sb.append(oq.poll()); } else { sb.append(jq.poll()); } } str = sb.toString(); StringBuilder result = new StringBuilder(); for (int i = 0; i < str.length(); i++) { if (Character.toUpperCase(str.charAt(i)) > 'F' && Character.toUpperCase(str.charAt(i)) <= 'Z') { result.append(str.charAt(i)); continue; } String tmp = hex2bin(str.charAt(i) + ""); String hex = bin2hex(new StringBuilder(tmp).reverse().toString()); result.append(hex.toUpperCase()); } System.out.println(result); } } private static String hex2bin(String hex) { int tmp = Integer.parseInt(hex, 16); return String.format(Locale.ENGLISH, "%04d", Integer.parseInt(Integer.toBinaryString(tmp))); } private static String bin2hex(String bin) { int tmp = Integer.parseInt(bin, 2); return Integer.toHexString(tmp); } }
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = null; while ((str = br.readLine()) != null) { str = str.replace(" ", ""); char[] chs = sort(str); System.out.println(transform(chs)); } } private static char[] sort(String s) { char[] chs = s.toCharArray(); doSort(chs, 2); doSort(chs, 3); return chs; } // 插入排序 private static void doSort(char[] chs, int start) { int n = chs.length; int lower = start - 2; for (int i = start, j = 0; i < n; i += 2) { if (chs[i] < chs[i - 2]) { char tmp = chs[i]; for (j = i; j > lower && chs[j - 2] > tmp; j -= 2) { chs[j] = chs[j - 2]; } chs[j] = tmp; } } } private static String transform(char[] chs) { for (int i = 0; i < chs.length; i++) { char ch = chs[i]; int num = -1; if (ch >= '0' && ch <= '9') { num = ch - '0'; } else if (ch >= 'a' && ch <= 'f') { num = ch - 'a' + 10; } else if (ch >= 'A' && ch <= 'F') { num = ch - 'A' + 10; } if (num == -1) { continue; } num = ((num & 1) << 3) | ((num & 2) << 1) | ((num & 4) >> 1) | ((num & 8) >> 3); chs[i] = (char) (num < 10 ? num + '0' : num - 10 + 'A'); } return new String(chs); } }
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextLine()) { // 注意 while 处理多个 case String inString = in.nextLine(); String[] split = inString.split(" "); String s = split[0] + split[1]; ArrayList<Character> jiArr = new ArrayList<>(); ArrayList<Character> ouArr = new ArrayList<>(); for (int i = 0; i < s.length(); i++) { if (i % 2 == 0) { ouArr.add(s.charAt(i)); } else { jiArr.add(s.charAt(i)); } } //排序 Collections.sort(jiArr, ((o1, o2) -> o1.compareTo(o2))); Collections.sort(ouArr, ((o1, o2) -> o1.compareTo(o2))); String convert = ""; for (int i = 0; i < ouArr.size(); i++) { convert = convert + ouArr.get(i); if (jiArr.size()-1 >= i ) { convert = convert + jiArr.get(i); } } //初始化16进制字典, 有些字典将所有的数据都初始化了,我觉得是真离谱,当你看完题目能脑测把所有字典初始化? Map<Integer, String> map = new HashMap<>(); map.put(10, "A"); map.put(11, "B"); map.put(12, "C"); map.put(13, "D"); map.put(14, "E"); map.put(15, "F"); Map<String, Integer> map2 = new HashMap<>(); map2.put("A", 10); map2.put("B", 11); map2.put("C", 12); map2.put("D", 13); map2.put("E", 14); map2.put("F", 15); StringBuffer res = new StringBuffer(); for (int i = 0; i < convert.length(); i++) { char c = convert.charAt(i); if (c >= '0' && c <= '9') { String s1 = c + ""; int num = Integer.parseInt(s1); Integer anInt = convert(num, map, res); if (anInt == null) continue; res.append(anInt); } else if ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')) { String upperCase = (c + "").toUpperCase(); Integer integer = map2.get(upperCase); Integer anInt = convert(integer, map, res); if (anInt == null) continue; res.append(anInt); } else { res.append(c); } } System.out.println(res); } } private static Integer convert(Integer integer, Map<Integer, String> map, StringBuffer res) { int anInt = 0; int length = Integer.toBinaryString(integer).length(); String string = ""; //二进制字符补位 坑点一 if (length < 4) { int j = 4 - length; for (int i1 = 0; i1 < j; i1++) { string += "0"; } } StringBuffer stringBuffer = new StringBuffer(string + Integer.toBinaryString(integer)); anInt = Integer.parseInt(stringBuffer.reverse().toString(), 2); //转换后的二进制数转换成16进制 if (anInt > 9) { String s2 = map.get(anInt); res.append(s2); return null; } return anInt; } }
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String str = in.nextLine().replace(" ", ""); List<Character> s1 = new ArrayList(); List<Character> s2 = new ArrayList(); for(int i = 0; i < str.length(); i++){ if(i % 2 == 0) s1.add(str.charAt(i)); else s2.add(str.charAt(i)); } Collections.sort(s1); Collections.sort(s2); List<Character> list = new ArrayList(); int i = 0; for(int j = 0; i < s1.size() && j < s2.size(); i++,j++){ list.add(s1.get(i)); list.add(s2.get(j)); } if(i < s1.size()) list.add(s1.get(s1.size()-1)); for(i = 0; i < list.size(); i++){ char c = list.get(i); if(!((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'))){ System.out.print(c); continue; } Integer n = Integer.parseInt(c+"", 16); String b = Integer.toBinaryString(n); StringBuilder sb = new StringBuilder("000".substring(b.length() - 1)+b); sb.reverse(); System.out.print(Integer.toString(Integer.parseInt(sb.toString(), 2), 16).toUpperCase()); } } }
import java.util.*; public class Main { public Character TransformChar(Character c) { if (!String.valueOf(c).matches("[1-9a-fA-F]")) { return c; } if (c == '0') { return '0'; } int sixthNum = Integer.parseInt(String.valueOf(c), 16); String binNum = Integer.toBinaryString(sixthNum); while (binNum.length() < 4) { binNum = "0" + binNum; } String revStr = new StringBuilder(binNum).reverse().toString(); int num = Integer.parseInt(revStr.substring(revStr.indexOf("1")), 2); String resutNum = Integer.toHexString(num); return resutNum.matches("[a-f]") ? resutNum.toUpperCase().charAt( 0) : resutNum.charAt(0); } public String transformStr(String str) { String replace = str.replace(" ", ""); char[] chars = replace.toCharArray(); ArrayList<Character> singleArr = new ArrayList<>(); ArrayList<Character> doubleArr = new ArrayList<>(); for (int i = 0; i < chars.length; i++) { if (i % 2 != 0) { singleArr.add(chars[i]); } else { doubleArr.add(chars[i]); } } Collections.sort(singleArr); Collections.sort(doubleArr); Iterator<Character> iterator1 = singleArr.iterator(); Iterator<Character> iterator2 = doubleArr.iterator(); for (int i = 0; i < singleArr.size(); i++) { Character next = iterator1.next(); Character ch = new Main().TransformChar(next); singleArr.set(i, ch); } for (int i = 0; i < doubleArr.size(); i++) { Character next = iterator2.next(); Character ch = new Main().TransformChar(next); doubleArr.set(i, ch); } Iterator<Character> newIterator1 = singleArr.iterator(); Iterator<Character> newIterator2 = doubleArr.iterator(); for (int i = 0; i < chars.length; i++) { if (i % 2 != 0) { chars[i] = newIterator1.next(); } else { chars[i] = newIterator2.next(); } } return new String(chars); } public static void main(String[] args) { Scanner in = new Scanner(System.in); String str = in.nextLine(); System.out.print(new Main().transformStr(str)); } }
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String arr[]=in.nextLine().split(" "); String s=arr[0]+arr[1]; String []str=new String[s.length()]; for(int i = 0;i<s.length();i++){ str[i] = String.valueOf(s.charAt(i)); } for(int i=0;i<str.length-2;i+=2){ for(int j=i+2;j<str.length;j+=2){ if(str[i].charAt(0)>str[j].charAt(0)) { String temp = str[i]; str[i] = str[j]; str[j] = temp; } } } for(int i=1;i<str.length-2;i+=2){ for(int j=i+2;j<str.length;j+=2){ if(str[i].charAt(0)>str[j].charAt(0)) { String temp = str[i]; str[i] = str[j]; str[j] = temp; } } } for(int i = 0;i<str.length;i++){ if(str[i].charAt(0)=='1'){ System.out.print("8"); }else if(str[i].charAt(0)=='2') { System.out.print("4"); }else if(str[i].charAt(0)=='3') { System.out.print("C"); }else if(str[i].charAt(0)=='4') { System.out.print("2"); }else if(str[i].charAt(0)=='5') { System.out.print("A"); }else if(str[i].charAt(0)=='6') { System.out.print("6"); }else if(str[i].charAt(0)=='7') { System.out.print("E"); }else if(str[i].charAt(0)=='8') { System.out.print("1"); }else if(str[i].charAt(0)=='A'||str[i].charAt(0)=='a') { System.out.print("5"); }else if(str[i].charAt(0)=='B'||str[i].charAt(0)=='b') { System.out.print("D"); }else if(str[i].charAt(0)=='C'||str[i].charAt(0)=='c') { System.out.print("3"); }else if(str[i].charAt(0)=='D'||str[i].charAt(0)=='d') { System.out.print("B"); }else if(str[i].charAt(0)=='E'||str[i].charAt(0)=='e') { System.out.print("7"); }else if(str[i].charAt(0)=='F'||str[i].charAt(0)=='f') { System.out.print("F"); }else { System.out.print(str[i]); } } } }
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextLine()) { // 注意 while 处理多个 case String a = in.nextLine().replaceAll(" ", ""); // System.out.println(getMix(a)); // System.out.println((int)'0'); String str = getMix(a); // System.out.println(str); char[] charArr = str.toCharArray(); int n = charArr.length; for (int i = 0; i < n; i++) { charArr[i] = changeChar(charArr[i]); } String str2 = new String(charArr); System.out.println(str2); } } public static char changeChar(char input) { String tempStr = null; if (input >= '0' && input <= '9') { tempStr = Integer.toBinaryString(input - '0'); } else if (input >= 'A' && input <= 'F') { tempStr = Integer.toBinaryString(input - '7'); } else if (input >= 'a' && input <= 'f') { tempStr = Integer.toBinaryString(input - 'W'); } else { return input; } // System.out.println(tempStr); while (tempStr.length() < 4) { tempStr = "0" + tempStr; } char[] tempCharArr = tempStr.toCharArray(); //反向遍历 int sum = 0; for (int i = 3; i > -1; i--) { sum += (tempCharArr[i] - '0') * Math.pow(2, i); } if (sum >= 0 && sum <= 9) { return (char)(sum + 48); } else { return (char)(sum + 55); } } public static String getMix(String input1) { char[] input2 = input1.toCharArray(); char[] ouShu = new char[input2.length / 2 + input2.length % 2]; char[] jiShu = new char[input2.length / 2]; for (int i = 0; i < input2.length; i++) { if (i % 2 == 0) { ouShu[i / 2] = input2[i]; } else { jiShu[(i - 1) / 2] = input2[i]; } } Arrays.sort(ouShu); Arrays.sort(jiShu); for (int i = 0; i < input2.length; i++) { if (i % 2 == 0) { input2[i] = ouShu[i / 2]; } else { input2[i] = jiShu[(i - 1) / 2]; } } return (new String(input2)); } }
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 记录对照表,十六进制数量有限,用对照表的方式比用代码更方便,注意key值可能有大小写,value值都是大写 Map<Character, Character> tr = new HashMap<Character, Character>(); tr.put('0', '0'); tr.put('1', '8'); tr.put('2', '4'); tr.put('3', 'C'); tr.put('4', '2'); tr.put('5', 'A'); tr.put('6', '6'); tr.put('7', 'E'); tr.put('8', '1'); tr.put('9', '9'); tr.put('a', '5'); tr.put('b', 'D'); tr.put('c', '3'); tr.put('d', 'B'); tr.put('e', '7'); tr.put('f', 'F'); tr.put('A', '5'); tr.put('B', 'D'); tr.put('C', '3'); tr.put('D', 'B'); tr.put('E', '7'); tr.put('F', 'F'); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNext()) { // 注意 while 处理多个 case String a = in.nextLine(); int i = 0, length = a.length(); List<Character> a1 = new ArrayList<>(); List<Character> a2 = new ArrayList<>(); // 记录奇数、偶数位置的字符串 for (char c : a.toCharArray()) { // 就一个空格,记录时顺手去掉 if (c == ' ') { continue; } if (i % 2 == 0) { a1.add(c); } else { a2.add(c); } i++; } // 分别排序 a1.sort(new Comparator<Character>() { public int compare(Character c1, Character c2) { return c1 - c2; } }); a2.sort(new Comparator<Character>() { public int compare(Character c1, Character c2) { return c1 - c2; } }); // 按照十六进制替换表替换 StringBuilder sb = new StringBuilder(); length = a1.size() + a2.size(); for (i = 0; i < length ; i++) { char c; if (i % 2 == 0) { c = a1.get(i / 2); } else { c = a2.get(i / 2); } if (('0' <= c && c <= '9') || ('a' <= c && c <= 'f') || ('A' <= c && c <= 'F')) { c = tr.get(c); } sb.append(c); } System.out.println(sb.toString()); } } }
import java.util.Scanner; import java.util.PriorityQueue; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.nextLine(); PriorityQueue<Character> oddPq = new PriorityQueue<>(); PriorityQueue<Character> evenPq = new PriorityQueue<>(); int index = 0; for (int i = 0; i < str.length(); i++) { // 判断当前索引是偶数位还是奇数位 // 遇到空格后需要修正index的值 if (str.charAt(i) == ' ') { index++; continue; } if ((i-index) % 2 == 0) { evenPq.add(str.charAt(i)); } else { oddPq.add(str.charAt(i)); } } char[] charr = new char[str.length() - 1]; index = 0; while (!oddPq.isEmpty() && !evenPq.isEmpty()) { charr[index++] = evenPq.poll(); charr[index++] = oddPq.poll(); } // 如果总数为奇数,则evenPq中还剩有一个元素 if (!evenPq.isEmpty()) charr[charr.length - 1] = evenPq.poll(); System.out.println(code(charr)); } public static String code (char[] charr) { for (int i = 0; i < charr.length; i++) { char c = charr[i]; if (c >= '0' && c <= '9') { c = reverseBinaryOfNumber(c - '0'); } else if ((c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f')) { c = c >= 'a' ? reverseBinaryOfNumber(10 + c - 'a') : reverseBinaryOfNumber(10 + c - 'A'); } charr[i] = c; } return new String(charr); } public static char reverseBinaryOfNumber(int x) { int temp = 0; int power = 8; while (x != 0) { if ((x & 1) == 1) { temp += power; } x >>= 1; power /= 2; } char c = '0'; if (temp > 9) { c = 'A'; c += temp - 10; }else { c += temp; } return c; } }