首页 > 试题广场 >

字符串合并处理

[编程题]字符串合并处理
  • 热度指数:192864 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

按照指定规则对输入的字符串进行处理。

详细描述:

第一步:将输入的两个字符串str1和str2进行前后合并。如给定字符串 "dec" 和字符串 "fab" , 合并后生成的字符串为 "decfab"

第二步:对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序。这里的下标的意思是字符在字符串中的位置。注意排序后在新串中仍需要保持原来的奇偶性。例如刚刚得到的字符串“decfab”,分别对下标为偶数的字符'd'、'c'、'a'和下标为奇数的字符'e'、'f'、'b'进行排序(生成 'a'、'c'、'd' 和 'b' 、'e' 、'f'),再依次分别放回原串中的偶数位和奇数位,新字符串变为“abcedf”

第三步:对排序后的字符串中的'0'~'9'、'A'~'F'和'a'~'f'字符,需要进行转换操作。
转换规则如下:
对以上需要进行转换的字符所代表的十六进制用二进制表示并倒序,然后再转换成对应的十六进制大写字符(注:字符 a~f 的十六进制对应十进制的10~15,大写同理)。
如字符 '4',其二进制为 0100 ,则翻转后为 0010 ,也就是 2 。转换后的字符为 '2'。
如字符 ‘7’,其二进制为 0111 ,则翻转后为 1110 ,对应的十进制是14,转换为十六进制的大写字母为 'E'。
如字符 'C',代表的十进制是 12 ,其二进制为 1100 ,则翻转后为 0011,也就是3。转换后的字符是 '3'。

根据这个转换规则,由第二步生成的字符串 “abcedf” 转换后会生成字符串 "5D37BF"。


数据范围:输入的字符串长度满足



输入描述:

样例输入两个字符串,用空格隔开。



输出描述:

输出转化后的结果。

示例1

输入

dec fab

输出

5D37BF
示例2

输入

ab CD

输出

3B5D

说明

合并后为abCD,按奇数位和偶数位排序后是CDab(请注意要按ascii码进行排序,所以C在a前面,D在b前面),转换后为3B5D          
示例3

输入

123 15

输出

88C4A
import sys

dd = {
    '0':'0',
    '1':'8',
    '2':'4',
    '3':'C',
    '4':'2',
    '5':'A',
    '6':'6',
    '7':'E',
    '8':'1',
    '9':'9',
    'A':'5',
    'B':'D',
    'C':'3',
    'D':'B',
    'E':'7',
    'F':'F'
}


for line in sys.stdin:
    s = line.strip().replace(' ', '')
    s1 = []
    s2 = []
    
    # 进行排序
    for i in range(len(s)):
        if i%2 == 0:
            s1.append(s[i])
        else:
            s2.append(s[i])
    s1.sort()
    s2.sort()
    res = []
    for i in range(len(s1)):
        res.append(s1[i])
        if i<= len(s2)-1:
            res.append(s2[i])
#     print(res)
    # 进行转换
    for c in res:
        if dd.get(c.upper()):
            print(dd[c.upper()], end='')
        else:
            print(c, end='')
    print()
            

发表于 2021-05-04 23:12:09 回复(0)
def px(s):
    str_ji=''
    str_ou=''
    n=len(s)
    sc=''
    for i in range(n):
        if i%2==0:
            str_ou+=s[i]
        else: str_ji+=s[i]
    str_ou=sorted(str_ou)
    str_ji=sorted(str_ji)
    n_ou=len(str_ou)
    n_ji=len(str_ji)
    length=min(n_ji,n_ou)
    for i in range(length):
        sc+=str_ou[i]
        sc+=str_ji[i]
    if n_ou > n_ji:
        sc+=str_ou[-1]
    else:
        if n_ou < n_ji:
            sc+=str_ji[-1]
        else: sc=sc
    return sc

def cz(s):
    a=int(s,16)
    a=bin(a)
    a = a[2:].zfill(4)
    n=len(a)
    b = a[::-1]
    kk=int(b,2)
    if kk<=9:
        sc=str(kk)
    else:
        if kk==10:
            sc='A'
        if kk==11:
            sc='B'
        if kk==12:
            sc='C'
        if kk==13:
            sc='D'
        if kk==14:
            sc='E'
        if kk==15:
            sc='F'
    return sc

sz='0123456789'
zm='abcdefABCDEF'

while True:
    try:
        s=input().replace(' ','') 
        s=px(s)
        n=len(s)
        result=''
        for i in range(n):
            if s[i] not in sz and s[i] not in zm:
                result+=s[i]
            else:
                result+=cz(s[i])
        print(result)
    except:
        break
出题人语文好差 烦死了
发表于 2021-04-08 22:11:12 回复(0)
import sys

def num_converter(num):
    hex = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']
    temp = hex.index(num.upper())
    binary = []
    for i in range(4):
        if temp>=2**(3-i):
            binary.append(1)
            temp -= 2**(3-i)
        else:
            binary.append(0)
    reverse_bin = []
    for i in range(4):
        reverse_bin.append(binary[3-i])
    output= 0
    for i in range(len(reverse_bin)):
        output += reverse_bin[i]*(2**(3-i))
    return hex[output]

for line in sys.stdin:
    # reading inputs
    str1, str2 = line.strip().split(" ")[0],line.strip().split(" ")[1]
    
    # merging and re-ordering
    entire_str = str1+str2
    str1 = []
    str2 = []
    for i in range(len(entire_str)):
        if i%2==0:
            str1.append(entire_str[i])
        else:
            str2.append(entire_str[i])
    str1 = sorted(str1)
    str2 = sorted(str2)
    entire_str = []
    for i in range(len(str1)+len(str2)):
        if i%2==0:
            entire_str.append(str1[i//2])
        else:
            entire_str.append(str2[i//2])
    
    # converting hexadecimal
    output = ""
    for item in entire_str:
        if (item>='0' and item<="9")&nbs***bsp;(item>="A" and item<="F")&nbs***bsp;(item>="a" and item<="f"):
            output += num_converter(item)
        else:
            output += item
    print(output)

发表于 2021-03-01 15:16:35 回复(0)
from itertools import zip_longest
import sys


def do_sort(s):
    a, b = [], []
    for i, c in enumerate(s):
        if i % 2:
            b.append(c)
        else:
            a.append(c)
    a.sort()
    b.sort()
    temp = []
    for c1, c2 in zip_longest(a, b):
        temp.append(c1)
        if c2:
            temp.append(c2)
    return "".join(temp)


def decode(s):
    output = ""
    for c in s:
        if c.isdigit()&nbs***bsp;ord("A")<=ord(c)<=ord("F")&nbs***bsp;ord("a")<=ord(c)<=ord("f"):
            bin_form = bin(int(c, base=16))[2:]
            bin_form = bin_form.rjust(4, "0")[::-1]
            hex_form = hex(int(bin_form, base=2))[2:]
            output += hex_form.upper()
        else:
            output += c
    return output


for s in sys.stdin:
    a, b = s.split()
    s = do_sort(a+b)
    print(decode(s))

发表于 2020-12-15 21:00:02 回复(0)
while True:
    try:
        s = input().strip().split(' ') #list
        s1 = s[0] #str
        s2 = s[1]
        ss = list(s1 + s2)
        ss[::2] = sorted(ss[::2]) #分别排序,注意,分别排序后还要插入原来的位置,所以要先分别排序,然后再放入原来的位置
        ss[1::2] = sorted(ss[1::2])
        d = []
        for i in ss: #理解题目,如果是在16进制里的,16-2,倒序,2-16,但是这两个进制不能直接转化,所以要借助10进制,而且倒序时要注意补充0
            if i in '0123456789abcdefABCDEF':
                i = bin(int(i,16))[2:] #先把16进制转化成10进制,再转化成2进制,去掉头0b
                i= (4-len(i))*'0'+i #去掉头后补充0操作
                i = hex(int(i[::-1],2))[2:].upper() #2进制倒序,转化成10进制,再转化成16进制,去头0x,再大写
            d.append(i)
        print(''.join(d))#注意,如果不在上面范围,直接保留
    except:
        break
发表于 2020-12-12 16:39:50 回复(0)
while True:
    try:
        str3 = input().replace(' ', '')
        new_str1, new_str2, new_str3 = '', '', ''
        for x in range(len(str3)):
            if x % 2 == 0:
                new_str1 += str3[x]
            else:
                new_str2 += str3[x]
        new_str1 = sorted(new_str1)
        new_str2 = sorted(new_str2)
        if len(new_str1) == len(new_str2):
            for x in range(len(new_str1)):
                new_str3 = new_str3 + new_str1[x] + new_str2[x]
        else:
            for x in range(len(new_str2)):
                new_str3 = new_str3 + new_str1[x] + new_str2[x]
            new_str3 = new_str3 + new_str1[-1]
        res_str3 = ''
        for x in new_str3:
            if x in '0123456789abcdefABCDEF':
                num1 = int(x, 16)
                num2 = bin(num1).replace('0b', '')
                num2 = '0'*(4-len(num2)) + num2
                str_num2 = ''
                for y in range(1, len(num2)+1):
                    str_num2 += num2[-y]
                num2 = int(str_num2, 2)
                num16 = hex(num2).replace('0x', '').upper()
                res_str3 += num16
            else:
                res_str3 += x
        print(res_str3)
    except:
        break

发表于 2020-12-03 17:26:15 回复(0)
while 1:
    try:
        a=''.join(input().split())
        a=list(a)
        a[::2]=sorted(a[::2])
        a[1::2]=sorted(a[1::2])
        for i in range(len(a)):
            if a[i] in '0123456789abcdefABCDEF':
                a[i]=format(int('{:0>4b}'.format(int(a[i],16))[::-1],2),'X')
        print(''.join(a))
    except:
        break
编辑于 2020-12-01 11:30:51 回复(0)
def BIT(s):
    list2 = []
    for i in s:
        if i in list1:  # i为16进制数

            # 先转10进制
            ten = int(i, 16)
            # 再由16进制转2进制
            # 右对齐,填充长度为4,用'0'填充,转换为list型
            two = list(format(ten, 'b').rjust(4, '0'))
            two.reverse()
            # 再由二进制变为10进制,再变为16进制
            ten = int(''.join(two), 2)
            sixteen = format(ten, 'x')

            if sixteen.islower():
                sixteen = sixteen.upper()

            list2.append(sixteen)

        else:
            list2.append(i)

    return list2

while True:
    try:
        s1,s2 = input().split()

        list1 = ['0','1','2','3','4','5','6','7','8','9',
                 'a','b','c','d','e','f',
                 'A','B','C','D','E','F']

        # 注意:字符串转化为列表
        s = list(s1 + s2)
        # 注意:奇数项和偶数项从小到大排序
        s[::2] = sorted(s[::2])
        s[1::2] = sorted(s[1::2])


        print(''.join(BIT(s)))

    except:
        break
😁😁希望对小白有帮助,我也是小白
发表于 2020-11-25 11:25:10 回复(0)
while True:
    try:
        dic = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"]
        inpt=input().replace(" ","")#zi字符串合并
        new=""
        ss=""
        odd=""
        even=""
        #提取even和odd的字符串
        for i in range(len(inpt)):
            if i%2 ==0:
                even+=inpt[i]
            else:
                odd+=inpt[i]
        #用sorted对odd和even 进行排序,然后转化成列表 
        odd=sorted(odd)
        even=sorted(even)
        for i in range(len(inpt)):
            if i%2==0:
                ss+=even[0]
                even.pop(0)
            else:
                ss+=odd[0]
                odd.pop(0)
        for i in range(len(ss)):
            if ss[i] in "0123456789abcdefABCDEF":
                new+= dic[int(bin(dic.index(ss[i].upper())).replace("0b","").rjust(4,"0")[::-1],2)]
            else:
                new+=ss[i]
        print(new)
    except:
        break
重新修改了一下前人的代码

编辑于 2020-11-21 12:11:04 回复(0)
while 1:
    try:
        a,b=input().split()
        c=a+b
        js=''
        os=''
        for i in range(0, len(c)):
            if i%2==0:
                js += c[i]
            else:
                os += c[i]
        js=sorted(js)
        os=sorted(os)
        new=[]
        for j in range(1, len(c)+1):
            if j%2==1:
                new.append(js[j//2])
            else :
                new.append(os[j//2-1])
        new1=[]
        for i in new:
            if  'a'<=i<='f' or '0'<=i<='9' or 'A'<=i<='F':
                t=len((bin(int(i, 16))[2:][::-1]))
                new1.append(('0'*(4-t)+bin(int(i, 16))[2:])[::-1])
            else:
                new1.append(i)
        s=''
        for i in new1:
            if 'F'<i<='Z' or 'f'<i<='z':
                s += i
            else:
                s += hex(int(i, 2))[2:].upper()

        print (s)
    except:
        break
发表于 2020-11-20 13:03:27 回复(0)
def string_sort(string):
    """
    :description: 下标为奇数的字符和下标为偶数的字符分别从小到大排序。
    :param:  string - str
    :return: str
    """
    # 版本1
    # odd = []
    # string_ = []
    # even = []
    # for i, item in enumerate(string):
    #     if (i + 1) % 2 == 0:
    #         even.append(item)
    #         string_.append('null')
    #     else:
    #         odd.append(item)
    #         string_.append(item)
    # odd.sort()
    # even.sort()
    # j, k = 0, 0
    # src_string = ''
    # for i, item in enumerate(string_):
    #     if item == 'null':
    #         src_string += str(even[j])
    #         j += 1
    #     else:
    #         src_string += str(odd[k])
    #         k += 1

    # 版本2
    odd = string[1::2]
    even = string[::2]

    src_string = [i for i in range(len(string))]
    src_string[1::2] = list(sorted(odd))
    src_string[::2] = list(sorted(even))

    return src_string


def hex_reverse(string):
    """
    :description: 如果字符为‘0’——‘9’或者‘A’——‘F’或者‘a’——‘f’,
                  则对他们所代表的16进制的数进行BIT倒序的操作,并转换为相应的大写字符。
                  如字符为‘4’,为0100b,则翻转后为0010b,也就是2。转换后的字符为‘2’;
                  如字符为‘7’,为0111b,则翻转后为1110b,也就是e。转换后的字符为大写‘E’。
                  【如果string为数字,则转为2进制,并进行逆序,再转为10进制;
                    如果string为字母,则先由16进制转为10进制,再由10进制转为16进制,变为大写】
    :param: string: str
    :return str
    """
    # 十六进制转十进制再二进制转
    src_ = bin(int('0x' + string, 16))[2:][::-1]
    # 二进制转十进制再转十六进制
    src_string = hex(int('0b' + src_ + '0' * (4 - len(src_)), 2))[2:]

    if src_string.isalpha():
        src_string = src_string.upper()

    return src_string


def deal_string(string):
    """
    :description: 如果字符为‘0’——‘9’或者‘A’——‘F’或者‘a’——‘f’,
                  则对他们所代表的16进制的数进行BIT倒序的操作,并转换为相应的大写字符。
                  如字符为‘4’,为0100b,则翻转后为0010b,也就是2。转换后的字符为‘2’;
                  如字符为‘7’,为0111b,则翻转后为1110b,也就是e。转换后的字符为大写‘E’。
    """
    src_string = ''
    for i, item in enumerate(string):
        value = ''
        if item.isdigit():
            value = hex_reverse(str(item))
            src_string += value
        elif ((item >= 'A') and (item <= 'F'))&nbs***bsp;((item >= 'a') and (item <= 'f')):
            value = hex_reverse(item)
            src_string += str(value)
        else:
            src_string += str(item)

    return src_string


if __name__ == '__main__':
    while True:
        try:
            string = input().strip().split(' ')
            string_ = str(string[0]) + str(string[-1])
            src_string = string_sort(string_)
#             print(src_string)
            src_ = deal_string(src_string)
            print(src_)
        except:
            break

发表于 2020-10-22 17:40:01 回复(0)
p = "0123456789ABCDEFabcdef"
while True:
    try:
        s1, s2 = input().split()
        s = s1 + s2
        s1, s2 = '', ''
        for index, value in enumerate(s):
            if index % 2 != 0:
                s1 += value
            else:
                s2 += value
        s1, s2 = ''.join(sorted(s1)), ''.join(sorted(s2))
        ss = ''
        for i in range(len(s1) + len(s2)):
            if i % 2 == 0:
                if s2[i//2] in p:
                    ss += hex(int(bin(int(s2[i//2], 16))[2:].zfill(4)[::-1], 2))[2:].upper()
                else:
                    ss += s2[i//2]
            else:
                if s1[i//2] in p:
                    ss += hex(int(bin(int(s1[i//2], 16))[2:].zfill(4)[::-1], 2))[2:].upper()
                else:
                    ss += s1[i//2]
        print(ss)
    except:
        break
发表于 2020-09-26 19:12:28 回复(0)
while True:
    try:
        str1,str2 = input().split()
        mergeStr = str1 + str2
        even,odd = sorted(mergeStr[::2]),sorted(mergeStr[1::2])
        mergeStr = ""
        for i , j in zip(even,odd):
            mergeStr += i
            mergeStr += j
        if(len(even) > len(odd)):
            mergeStr += even[-1]
        tab = str.maketrans("0123456789abcdefABCDEF","084C2A6E195D3B7F5D3B7F")
        print(mergeStr.translate(tab))
    except:
        break

py版的好理解,c++的版本,主要就是bitset的部分,还有就是排序跟合并的前后问题,调试了半天,淦
#include<iostream>
#include<string>
#include<bitset>
#include<algorithm>
using namespace std;

string Tab{ "0123456789ABCDEF" };  //映射表
string foo(string str1, string str2)
{
	string ans = str1 + str2;  //合
	string odd, even;
	for (unsigned int i = 0; i < ans.size(); ++i)  //分
	{
		if (i % 2 == 0)
			even += ans[i];
		else
			odd += ans[i];
	}

	sort(odd.begin(), odd.end());  //排序
	sort(even.begin(), even.end());

	ans.clear();
	for (unsigned int i = 0; i < odd.size(); ++i)  //合
	{
		ans += even[i];
		ans += odd[i];
	}
	if (even.size() > odd.size())
		ans += even.back();

	for (auto& ch : ans)  //转换
	{
		if ('a' <= ch && ch <= 'f')  //统一转换到大写
			ch -= 32;
		if (Tab.find(ch) == string::npos)
			continue;

		bitset<4> bin1(Tab.find(ch));   //二进制bitset<>,八进制oct,十进制dec,十六进制hex
		string tmp = bin1.to_string();
		reverse(tmp.begin(), tmp.end());  //反转
		bitset<4> bin2(tmp);
		ch = Tab[bin2.to_ulong()];  //二进制转10进制,映射
	}
	return ans;
}
int main()
{
	string str1, str2;
	while (cin >> str1 >> str2)
		cout << foo(str1, str2) << endl;
	return 0;

}



发表于 2020-08-30 16:26:31 回复(1)
python
def combine(s1, s2):
    res = []
    s = s1 + s2
    r1 = ''
    r2 = ''
    for i in range(len(s)):
        if i % 2 == 0:
            r1 += s[i]
        else:
            r2 += s[i]
    r1 = sorted(r1, reverse=False)
    r2 = sorted(r2, reverse=False)
    for i in range(min(len(r1), len(r2))):
        res.append(r1[i])
        res.append(r2[i])
    if len(r1) > len(r2):
        res.append(r1[-1])
    return ''.join(res)

def change(x):
    # '0x' 为 16进制数前缀
    x = '0x' + x
    bit = bin(int(x,16)).replace('0b','')[::-1].ljust(4,'0') # 如字符为‘4’,为0b100,反转后为0010
    # 0010-->2
    num = int(bit, 2)
    res = hex(num).replace('0x','')
    if res.isalpha():
        res = res.upper()
    return res

while True:
    try:
        s = input().split()
        newS = combine(s[0], s[1])
        result = ''
        for i in newS:
            if i.isdigit()&nbs***bsp;'A'<=i<='F'&nbs***bsp;'a'<=i<='f':
                result += change(i)
            else:
                result += i
        print(result)
    except:
        break


编辑于 2020-08-26 22:12:15 回复(0)
//丑陋写法
while True:
    try:
        str1, str2= input().split()
        mystr=str1+str2
        arr0=[]
        arr1=[]
        result=[]
        for i in range(len(mystr)):
            if i%2==0:
                arr0.append(mystr[i])
            else:
                arr1.append(mystr[i])
        arr0.sort()
        arr1.sort()
        for i in range(len(mystr)):
            if i%2==0:
                result.append(arr0[0])
                arr0.pop(0)
            else:
                result.append(arr1[0])
                arr1.pop(0)
        low='abcdef'
        high=low.upper()
        low=sorted(low)
        high=sorted(high)
        for i in range(len(mystr)):
            a=result[i]
            if a.isdecimal()==True or (a in low) or (a in high):
                num=hex(int(('0'*(4-len(bin(int(a,16))[2:]))+bin(int(a,16))[2:])[::-1],2))[2:]                
                result[i]=num.upper()
        print(''.join(result))
    except:
        break

发表于 2020-08-18 12:15:27 回复(0)
while True:
    try:
        ss=input().replace(' ','')
        even,odd='',''
        xx,zz='',''
        for i in range(len(ss)):
            if i%2==0:
                even+=ss[i]
            else:
                odd+=ss[i]
        for k,j in zip(sorted(even),sorted(odd)):
            xx+=k
            xx+=j
        if len(ss)%2!=0:
            xx+=sorted(even)[-1]
        for j in xx:
            if j in '0123456789abcdefABCDEF':
                yy='0000'+bin(int(j,16))[2:]
                yy=yy[-4:][::-1]
                zz+=hex(int('0b'+''.join(yy),2))[-1].upper()
            else:
                zz+=j
        print(zz)
    except:
这样运行是可以的,不过yy那两行连在一起就出错,不知道为什么;
while ii <(len(ss)-1):
    even+=ss[ii]
    odd+=ss[ii+1]
    ii+=2
还有这里用while就超时了,有没有大佬解释一下为啥

发表于 2020-08-11 15:31:03 回复(0)
def swap_bit(c):
    if c in '1234567890abcdefABCDEF':
        c = bin(int(c,16))[2:]
        c = (4-len(c))*'0'+c
        c = (hex(int(c[::-1],2))[2:]).upper()
    return c
 
while True:
    try:
        str1 = input().replace(' ', '')
        evens = []
        odds = []
        #1.首先划分基偶区间
        for i,k in enumerate(str1):
            if i%2==0:
                evens.append(k)
            else:
                odds.append(k)
        #排序
        odds = sorted(odds)
        evens = sorted(evens)
        #2.分别进行码值转换(基数列一定大于等于偶数列)
        res = ''
        for i in range(len(odds)):
            res+=swap_bit(evens[i])
            res+=swap_bit(odds[i])
        if len(evens)>len(odds):
            res+=swap_bit(evens[-1])
        
        #3。输出结果
        print(res)

    except:
        break
发表于 2020-07-20 11:42:03 回复(0)
def change(a):
    n = int(a,16)
    s = bin(n)[2:]
    s = s.rjust(4,"0")
    s = s[::-1]
    sum = 0
    for i in range(1,len(s)+1):
        sum +=int( s[-i]) * pow(2,i-1)
    z = hex(sum)[2:]
    return z.upper()

while 1:
    try:
        s = input().strip().split()
        s = s[0]+s[1] 
        ss_1 = sorted(s[::2])  # 偶数部分
        ss_2 = sorted(s[1::2])  # 奇数部分
        ss1 = ''.join(ss_1)
        ss2 = ''.join(ss_2)
        
        ssw = '0123456789abcdefABCDEF'
        ss = ''
        for i in range(len(ss2)):
            if ss1[i] in ssw:
                ss += change(ss1[i])
            else:
                ss += ss1[i]
            if ss2[i] in ssw:
                ss += change(ss2[i])
            else:
                ss += ss2[i]
        if len(ss1)>len(ss2):
            if ss1[-1] in ssw:
                ss += change(ss1[-1])
            else:
                ss += ss1[-1]
        print(ss)
    except:
        break
发表于 2020-07-08 01:32:00 回复(0)
ls_1 = ['a','b','c','d','e','f']
ls_2 = ['10','11','12','13','14','15']
l_1 = ['0','1','2','3','4','5','6','7','8','9']
def jinzhi_16_2(s):
    if s in l_1:
        num = eval(s)
        l = []
        if num == 0:
            return '0000'
        else:
            while num != 0:
                a = num%2
                num = num//2
                l.append(str(a))
            while len(l) != 4:
                l.append(str(0))
            return str(''.join(l))
    else:
        for i in range(6):
            if s == ls_1[i]&nbs***bsp;s == ls_1[i].upper():
                l_t,num = [],eval(ls_2[i])
                while num != 0:
                    a = num%2
                    num = num//2
                    l_t.append(str(a))
                while len(l_t)!=4:
                    l_t.append(str(0))
                return str(''.join(l_t))
def jinzhi_2_16(s):
    num = 0
    for i in range(4):
        num += eval(s[i])*2**(3-i)
    if num in range(10):
        return str(num)
    elif num in range(10,16):
        return ls_1[num-10].upper()
while True:
    try:
        a = input().replace(' ','')
        lst_ji,lst_ou= [],[]
        for i in range(len(a)):
            if i % 2 == 0:
                lst_ou.append(a[i])
            elif i % 2 != 0:
                lst_ji.append(a[i])
        lst_ji.sort()
        lst_ou.sort()
        lst = []
        for j in range(min(len(lst_ji),len(lst_ou))):
            lst.append(lst_ou[j])
            lst.append(lst_ji[j])
        if len(lst_ji) > len(lst_ou):
            lst.append(lst_ji[-1])
        elif len(lst_ji) < len(lst_ou):
            lst.append(lst_ou[-1])
        l_all = []
        for p in lst:
            if p in ls_1&nbs***bsp;p in l_1&nbs***bsp;p.lower() in ls_1:
                a_t = jinzhi_16_2(p)
                b_t = jinzhi_2_16(a_t)
                l_all.append(b_t)
            else:
                l_all.append(p)
        print(''.join(l_all))
    except:
        break

发表于 2020-05-16 15:56:45 回复(0)