题解 | #字符串合并处理#
字符串合并处理
https://www.nowcoder.com/practice/d3d8e23870584782b3dd48f26cb39c8f
int cmp(char *a, char *b){
return (int)(*a-*b);
}
void sort(char*a,int len)
{
char odd[100]={0};
char even[100]={0};
int x=0,y=0;
for(int i=0;i<len;i++)
{
if(i%2==0)//用下标来计算,应该错开一位
odd[x++]=a[i];
else
even[y++]=a[i];
}
qsort(odd,x,sizeof(char),cmp);
qsort(even,y,sizeof(char),cmp);
x=y=0;
for(int i=0;i<len;i++)
{
if(i%2==0)
a[i]=odd[x++];
else
a[i]=even[y++];
}
}
char reverse(int n)
{
int arr[4]={0};
for(int i=0;i<4;i++)
{
arr[i]=n%2;
n/=2;
}
int num=0;
char x=0;
for(int i=0;i<4;i++)
num+=arr[3-i]*(int)pow(2,i);
if(num>=0&&num<10)
x=num+'0';
else if(num>=10&&num<=15)
x=num+'A'-10;
return x;
}
char change(char n)
{
int num=32;
if(n>='a'&&n<='f')
num=10+n-'a';
else if(n>='A'&&n<='F')
num=10+n-'A';
else if(isdigit(n))
num=n-'0';
if(num!=32)
return reverse(num);
else
return 1;
}
int main()
{
char arr[300]={0};
scanf("%s",arr);
int len1=strlen(arr);
scanf("%s",arr+len1);
int len=strlen(arr);
sort(arr,len);
for(int i=0;i<len;i++)
{
char n=change(arr[i]);
if(n!=1)
arr[i]=n;
}
printf("%s",arr);
return 0;
}