题解 | #字符串合并处理#
字符串合并处理
https://www.nowcoder.com/practice/d3d8e23870584782b3dd48f26cb39c8f
#include <algorithm>
#include <iostream>
#include <linux/limits.h>
#include <vector>
using namespace std;
int change(int num,int erjinzhi[])
{
for(int j=0;j<4;j++)
{
erjinzhi[j]=num%2;
num/=2;
}
for(int j=0;j<2;j++)
{
int k=erjinzhi[j];
erjinzhi[j]=erjinzhi[3-j];
erjinzhi[3-j]=k;
}
int w=1;
for(int j=0;j<4;j++)
{
if(j!=0) w*=2;
if(erjinzhi[j]==1)
{
num+=w;
}
}
return num;
}
int main() {
string str1,str2;
cin>>str1>>str2;
vector<char> odds;
vector<char> evens;
string s;
for(int i=0;i<str1.size()+str2.size();i++)
{
if(i<str1.size())
{
s.push_back(str1[i]);
}
else {
s.push_back(str2[i-str1.size()]);
}
if(i%2)
{
odds.push_back(s[i]);
}
else evens.push_back(s[i]);
}
sort(odds.begin(), odds.end());
sort(evens.begin(),evens.end());
int erjinzhi[4];
for(int i=0;i<s.size();i++)
{
if(i%2)
{
s[i]=odds[i/2];
}
else s[i]=evens[i/2];
int num;
if(s[i]>='0'&&s[i]<='9')
{
num=s[i]-'0';
}
else if(s[i]>='A'&&s[i]<='F')
{
num=s[i]-'A'+10;
}
else if(s[i]>='a'&&s[i]<='f')
{
num=s[i]-'a'+10;
}
else continue;
num=change(num,erjinzhi);
if(num>=0&&num<=9)
{
s[i]=num+'0';
}
else s[i]=num-10+'A';
}
cout<<s;
}
// 64 位输出请用 printf("%lld")
顺丰集团工作强度 378人发布
