题解 | #字符串合并处理#
字符串合并处理
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; }