首页 > 试题广场 >

字符串合并处理

[编程题]字符串合并处理
  • 热度指数:216817 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
\hspace{15pt}对于给定的由大小写字母和数字构成的字符串 st,记下标从 1 开始。按以下两个阶段进行处理:

\hspace{15pt}【合并阶段】
\hspace{23pt}\bullet\,第一步,将 st 合并,形成一个新字符串 u
\hspace{23pt}\bullet\,第二步,将 u 中奇数位字符按 Ascii 码从小到大(\texttt{`A'} \lt \texttt{`B'} \cdots \lt \texttt{`Z'} \lt \texttt{`a'} \lt \cdots \lt \texttt{`z'})进行排序,随后将偶数位字符也按 Ascii 码从小到大进行排序,得到 u'

\hspace{15pt}【调整阶段】
\hspace{15pt}随后,从左到右遍历 u' 中的每一个字符 u'_i
\hspace{23pt}\bullet\,第一步,若 u'_i 不是合法十六进制字符(即不为 \texttt{0-9}\texttt{a-f}\texttt{A-F}),则保留原字符,直接追加到结果中;否则,将其转换为十进制数。
\hspace{23pt}\bullet\,第二步,将该十进制数转换为四位二进制数(高位不足补 0,例如 (5)_{10}=(\texttt{0101})_2);
\hspace{23pt}\bullet\,第三步,将该二进制数翻转(反过来书写);
\hspace{23pt}\bullet\,第四步,将该二进制数转换为大写的十六进制数,追加到结果中。

\hspace{15pt}最终输出上述拼接而成的字符串。

输入描述:
\hspace{15pt}在一行上输入两个长度 1 \leqq {\rm length}(s), {\rm length}(t) \leqq 100,由大小写字母和数字构成的字符串 st,代表待处理的字符串。


输出描述:
\hspace{15pt}输出处理后的最终字符串。
示例1

输入

dec fab

输出

5D37BF

说明

\hspace{15pt}在这个样例中,全过程描述如下:
\hspace{15pt}【合并阶段】
\hspace{23pt}\bullet\,第一步合并得到 u = \texttt{
\hspace{23pt}\bullet\,第二步排序得到 u' = \texttt{
\hspace{15pt}【调整阶段】
\hspace{23pt}\bullet\,对于第一个字符 (\texttt{a})_{16},其十进制数为 (10)_{10},二进制数为 (\texttt{1010})_2,翻转后得到 (\texttt{0101})_2,再转换回十六进制数为 (\texttt{5})_{16}
\hspace{23pt}\bullet\,第二个字符 (\texttt{b})_{16}=(11)_{10}=(\texttt{1011})_2,翻转 (\texttt{1101})_2=(\texttt{D})_{16}
\hspace{23pt}\bullet\,第三个字符 (\texttt{c})_{16}=(12)_{10}=(\texttt{1100})_2,翻转 (\texttt{0011})_2=(\texttt{3})_{16}
\hspace{23pt}\bullet\,第四个字符 (\texttt{e})_{16}=(14)_{10}=(\texttt{1110})_2,翻转 (\texttt{0111})_2=(\texttt{7})_{16}
\hspace{23pt}\bullet\,第五个字符 (\texttt{d})_{16}=(13)_{10}=(\texttt{1101})_2,翻转 (\texttt{1011})_2=(\texttt{B})_{16}
\hspace{23pt}\bullet\,第六个字符 (\texttt{f})_{16}=(15)_{10}=(\texttt{1111})_2,翻转 (\texttt{1111})_2=(\texttt{F})_{16}
示例2

输入

abV CDw

输出

B3VD5w

说明

\hspace{15pt}在这个样例中,全过程描述如下:
\hspace{15pt}【合并阶段】
\hspace{23pt}\bullet\,第一步合并得到 u = \texttt{
\hspace{23pt}\bullet\,第二步排序得到 u' = \texttt{
\hspace{15pt}【调整阶段】
\hspace{23pt}\bullet\,对于第一个字符 (\texttt{D})_{16},其十进制数为 (13)_{10},二进制数为 (\texttt{1101})_2,翻转后得到 (\texttt{1011})_2=(\texttt{B})_{16}
\hspace{23pt}\bullet\,第二个字符 (\texttt{C})_{16}=(12)_{10}=(\texttt{1100})_2,翻转 (\texttt{0011})_2=(\texttt{3})_{16}
\hspace{23pt}\bullet\,第三个字符 (\texttt{V})_{16},跳过该字符;
\hspace{23pt}\bullet\,第四个字符 (\texttt{b})_{16}=(11)_{10}=(\texttt{1011})_2,翻转 (\texttt{1101})_2=(\texttt{D})_{16}
\hspace{23pt}\bullet\,第五个字符 (\texttt{a})_{16}=(10)_{10}=(\texttt{1010})_2,翻转 (\texttt{0101})_2=(\texttt{5})_{16}
\hspace{23pt}\bullet\,第六个字符 (\texttt{w})_{16},跳过该字符。
示例3

输入

123 15

输出

88C4A

说明

\hspace{15pt}在这个样例中,全过程描述如下:
\hspace{15pt}【合并阶段】
\hspace{23pt}\bullet\,第一步合并得到 u = \texttt{
\hspace{23pt}\bullet\,第二步排序得到 u' = \texttt{
\hspace{15pt}【调整阶段】
\hspace{23pt}\bullet\,对于第一、二个字符 (\texttt{1})_{10},其十进制数为 (1)_{10},二进制数为 (\texttt{0001})_2,翻转后得到 (\texttt{1000})_2,再转换回十六进制数为 (\texttt{8})_{16}
\hspace{23pt}\bullet\,第三个字符 (\texttt{3})_{16}=(3)_{10}=(\texttt{0011})_2,翻转 (\texttt{1100})_2=(\texttt{C})_{16}
\hspace{23pt}\bullet\,第四个字符 (\texttt{2})_{16}=(2)_{10}=(\texttt{0010})_2,翻转 (\texttt{0100})_2=(\texttt{4})_{16}
\hspace{23pt}\bullet\,第五个字符 (\texttt{5})_{16}=(5)_{10}=(\texttt{0101})_2,翻转 (\texttt{1010})_2=(\texttt{A})_{16}

备注:
本题已于下方时间节点更新,请注意题解时效性:
1. 2025-05-15 更新题面。
2. 2024-12-14 更新题面。

这道题你会答吗?花几分钟告诉大家答案吧!