import java.util.Arrays;
import java.util.Scanner;
public class CombineString {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
String str1 = sc.next();
String str2 = sc.next();
StringBuilder sb = new StringBuilder(str1);
sb.append(str2);
String str = sb.toString();
StringBuilder sb1 = new StringBuilder();
StringBuilder sb2 = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
if(i%2!=0)
sb1.append(str.charAt(i));
else
sb2.append(str.charAt(i));
}
char[] ch_a = sb1.toString().toCharArray();
char[] ch_b = sb2.toString().toCharArray();
Arrays.sort(ch_a);
Arrays.sort(ch_b);
StringBuilder sb_a = new StringBuilder();
for (int i = 0; i < ch_a.length; i++) {
sb_a.append(ch_b[i]);
sb_a.append(ch_a[i]);
}
String result = sb_a.toString();
for (int i = 0; i < result.length(); i++) {
char ch = result.charAt(i);
fun(ch);
}
}
private static void fun(char ch) {
if((ch>='0'&&ch<='9') || (ch>='A'&&ch<='F') || (ch>='a'&&ch<='f')){
String ss = ch + "";
int a = Integer.parseInt(ss, 16);
String s_a = Integer.toBinaryString(a);
int a_int = Integer.parseInt(s_a);
//倒序
String str = a_int+"";
StringBuilder sb = new StringBuilder();
for (int i = str.length()-1; i >=0; i--) {
sb.append(str.charAt(i));
}
String str1 = sb.toString();
String str_hex = bitToHex(str1);
System.out.print(str_hex.toUpperCase());
}
else
return;
}
private static String bitToHex(String bString) {
if (bString == null || bString.equals(""))
return null;
StringBuffer tmp = new StringBuffer();
int iTmp = 0;
for (int i = 0; i < bString.length(); i += 4)
{
iTmp = 0;
for (int j = 0; j < 4; j++)
{
iTmp += Integer.parseInt(bString.substring(i + j, i + j + 1)) << (4 - j - 1);
}
tmp.append(Integer.toHexString(iTmp));
}
return tmp.toString();
}
}
按照指定规则对输入的字符串进行处理。
详细描述:
将输入的两个字符串合并。
对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序。这里的下标意思是字符在字符串中的位置。
对排训后的字符串进行操作,如果字符为‘0’——‘9’或者‘A’——‘F’或者‘a’——‘f’,则对他们所代表的16进制的数进行BIT倒序的操作,并转换为相应的大写字符。如字符为‘4’,为0100b,则翻转后为0010b,也就是2。转换后的字符为‘2’; 如字符为‘7’,为0111b,则翻转后为1110b,也就是e。转换后的字符为大写‘E’。
举例:输入str1为"dec",str2为"fab",合并为“decfab”,分别对“dca”和“efb”进行排序,排序后为“abcedf”,转换后为“5D37BF”
该方案虽然样例输出没问题,但是OJ错误。应该是我理解错了。看下面这个正确运行的答案:
import java.util.Scanner;
public class Main {
public static void main(String[] arg0){
Scanner sc = new Scanner(System.in);
String s1 = sc.next();
String s2 = sc.next();
char[] c = (s1+s2).toCharArray();
sort(c, c.length-1);
sort(c, c.length-2);
for(int i = 0; i < c.length; i++){
System.out.print(change(c[i]));
}
}
public static char change(char c ){
char[] word = "ABCDEF".toCharArray();
int v = 0;
if(c >= '0' && c <= '9'){
v = c - 48;
}else if( c >= 'a' && c <= 'f'){
v = c - 87;
}else if( c>= 'A' && c <= 'F'){
v = c - 55;
}else return c;
String str = Integer.toBinaryString(v);
v = 0;
for(int i = 0; i < str.length(); i++){
v += (str.charAt(i)-48) *((int) Math.pow(2, i));
}
if(v >= 10) c = word[v-10];
else c = (char) (v + 48);
return c;
}
public static void sort(char[] c, int lastIndex){
for(int i = 0; i < c.length; i = i + 2){
for(int j = lastIndex; j > 1; j = j -2){
if(c[j] < c[j - 2]){
char t = c[j];
c[j] = c[j - 2];
c[j-2] = t;
}
}
}
}
}