在一行上输入两个长度
,由大小写字母和数字构成的字符串
和
,代表待处理的字符串。
输出处理后的最终字符串。
dec fab
5D37BF
在这个样例中,全过程描述如下:
【合并阶段】
第一步合并得到
;
第二步排序得到
。
【调整阶段】
对于第一个字符
,其十进制数为
,二进制数为
,翻转后得到
,再转换回十六进制数为
;
第二个字符
,翻转
;
第三个字符
,翻转
;
第四个字符
,翻转
;
第五个字符
,翻转
;
第六个字符
,翻转
。
abV CDw
B3VD5w
在这个样例中,全过程描述如下:
【合并阶段】
第一步合并得到
;
第二步排序得到
。
【调整阶段】
对于第一个字符
,其十进制数为
,二进制数为
,翻转后得到
;
第二个字符
,翻转
;
第三个字符
,跳过该字符;
第四个字符
,翻转
;
第五个字符
,翻转
;
第六个字符
,跳过该字符。
123 15
88C4A
在这个样例中,全过程描述如下:
【合并阶段】
第一步合并得到
;
第二步排序得到
。
【调整阶段】
对于第一、二个字符
,其十进制数为
,二进制数为
,翻转后得到
,再转换回十六进制数为
;
第三个字符
,翻转
;
第四个字符
,翻转
;
第五个字符
,翻转
。
本题已于下方时间节点更新,请注意题解时效性:
1. 2025-05-15 更新题面。
2. 2024-12-14 更新题面。
#include <ctype.h> #include <stdio.h> #include <string.h> #include <math.h> void swap(char *a, char *b){ char temp = *a; *a = *b; *b = temp; } char change(int num){ int sum = 0, temp = 0; if(num >= 0 && num <= 15){ for(int i = 0; i < 4; ++ i){ if(num & (0x1 << i)) sum = sum + pow(2, 3 - i); } } switch(sum){ case 0: return '0'; case 1: return '1'; case 2: return '2'; case 3: return '3'; case 4: return '4'; case 5: return '5'; case 6: return '6'; case 7: return '7'; case 8: return '8'; case 9: return '9'; case 10: return 'A'; case 11: return 'B'; case 12: return 'C'; case 13: return 'D'; case 14: return 'E'; case 15: return 'F'; } return -1; } int main() { char buf[1024]; char temp1[256]; char temp2[256]; scanf("%s", temp1); scanf("%s", temp2); snprintf(buf, sizeof(buf), "%s%s", temp1, temp2); for(int i = 0; i < strlen(buf) - 2; i = i + 2){ for(int j = 0; j < strlen(buf) - 2 - i; j = j + 2){ if(buf[j] > buf[j + 2]){ swap(&buf[j], &buf[j + 2]); } } } for(int i = 1; i < strlen(buf) - 1; i = i + 2){ for(int j = 1; j < strlen(buf) - i - 1; j = j + 2){ if(buf[j] > buf[j + 2]){ swap(&buf[j], &buf[j + 2]); } } } for(int i = 0; i < strlen(buf); ++ i){ if(buf[i] >= 'a' && buf[i] <= 'f'){ buf[i] = change(buf[i] - 'a' + 10); }else if(buf[i] >= 'A' && buf[i] <= 'F'){ buf[i] = change(buf[i] - 'A' + 10); }else if(buf[i] >= '0' && buf[i] <= '9'){ buf[i] = change(buf[i] - '0'); } } printf("%s", buf); return 0; }
#define mask 0x80 //10000000b 二进制掩码 char reverseChar(char data){ char dataTemp = data; //不动data值以备后用 char res = 0x00; for(int i = 0; i < 8; i++){ //循环8次 res = res >> 1; //从最高位写入,右移 //dataTemp 和 mask 按位与后,留下的是 10000000b 或 00000000b //和res按位或,把res最高位写入 res = res | (dataTemp & mask); dataTemp = dataTemp << 1;//从最高位读出,左移 } return res; }函数能不能用没试过(我是懒狗),就是个思路
#include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> // compare - 比较函数,用于 qsort 函数排序 int compare(const void* a, const void* b) { return *(char*)a - *(char*)b; } int main() { // 输入两个字符串 char firstStr[201], secondStr[101]; scanf("%s%s", firstStr, secondStr); // 合并两个字符串 strcat(firstStr, secondStr); // 分别将偶数位和奇数位的字符存入对应数组 int strLen = strlen(firstStr); char odds[strLen / 2], evens[strLen / 2]; int oddLen = 0, evenLen = 0; // 将 firstStr 字符的偶数位和奇数位存入奇偶数组中 for (int i = 0; i < strLen; i++) { if (i % 2) { // 如果 i 是奇数,把当前字符存入 odds 数组 odds[oddLen++] = firstStr[i]; } else { // 否则,把当前字符存入 evens 数组 evens[evenLen++] = firstStr[i]; } } // 对偶数位和奇数位的字符进行排序 qsort(odds, oddLen, sizeof(char), compare); qsort(evens, evenLen, sizeof(char), compare); // 将排序后的偶数位和奇数位的字符重新插入到 firstStr 中,并对十六进制字符进行加密输出。 oddLen = 0, evenLen = 0; for (int i = 0; i < strLen; i++) { if (i % 2) { // 如果 i 是奇数,把 odds 数组中的字符插入 firstStr 中 firstStr[i] = odds[oddLen++]; } else { // 否则,把 evens 数组中的字符插入 firstStr 中 firstStr[i] = evens[evenLen++]; } if (isxdigit(firstStr[i])) { // 如果当前字符是十六进制字符 char hexStr[] = {firstStr[i], '\0'}; int num = strtol(hexStr, NULL, 16); // 对十六进制字符进行加密 int encrypted = (num & 1) << 3 | (num & 2) << 1 | (num & 4) >> 1 | (num & 8) >> 3; printf("%X", encrypted); // 输出加密后的十六进制字符 } else { // 否则,直接输出当前字符 printf("%c", firstStr[i]); } } return 0; }
#include <stdio.h> int main () { char buf[200] ={0}; int len = 0, i, j; char sw[16] = {'0','8','4','C','2','A','6','E','1','9','5','D','3','B','7','F'}; while(scanf("%s", &buf[len]) != EOF) len += strlen(&buf[len]); for(i = 0; i < len - 1; i++) { for(j = i + 2; j < len; j += 2) { if(buf[i] > buf[j]) { buf[i] ^= buf[j]; buf[j] ^= buf[i]; buf[i] ^= buf[j]; } } if(buf[i] >= 'a' && buf[i] <= 'f') buf[i] = buf[i] - 'a' + 10; else if(buf[i] >= 'A' && buf[i] <= 'F') buf[i] = buf[i] - 'A' + 10; else if(buf[i] >= '0' && buf[i] <= '9') buf[i] = buf[i] - '0'; if(buf[i] < 16) buf[i] = sw[buf[i]]; } printf("%s", buf); }
#include <stdio.h> #include <string.h> int cmpfunc(char *a, char *b) { return *a - *b; } char change(char a) { switch(a) { case '0' : return '0'; break; case '1' : return '8'; break; case '2' : return '4'; break; case '3' : return 'C'; break; case '4' : return '2'; break; case '5' : return 'A'; break; case '6' : return '6'; break; case '7' : return 'E'; break; case '8' : return '1'; break; case '9' : return '9'; break; case 'A' : case 'a' : return '5'; break; case 'B': case 'b' : return 'D'; break; case 'C' : case 'c' : return '3'; break; case 'D' : case 'd' : return 'B'; break; case 'E' : case 'e' : return '7'; break; case 'F': case 'f' : return 'F'; break; default : return a; break; } } void revert(char *s, int len) { int i = 0; for (i = 0; i < len; i++) { if (s[i] > 'F' && s[i] <= 'Z') { continue; } if (s[i] > 'f') { continue; } char tmp = change(s[i]); s[i] = tmp; } } int main() { char str1[100] = { 0 }; char str2[200] = { 0 }; char str3[200] = { 0 }; int i = 0; int len = 0, len1 = 0, len2 = 0, len3 = 0; scanf("%s %s", str1, str2); //printf("src:\n%s\n%s\n", str1, str2); strcat(str3, str1); strcat(str3, str2); memset(str1, 0, 100); memset(str2, 0, 100); len3 = strlen(str3); //printf("str3[%d]:%s\n", len3, str3); for (i = 0; i < len3; i++) { if (i % 2 == 1) { str1[len1++] = str3[i]; } if ((i % 2) == 0) { str2[len2++] = str3[i]; } str3[i] = 0; } //printf("ji ou:%s, %s\n", str1, str2); qsort(str1, len1, sizeof(char), cmpfunc); qsort(str2, len2, sizeof(char), cmpfunc); //printf("qsort:[%d]%s, [%d]%s\n", len1, str1, len2, str2); len3 = 0; len = len1 < len2 ? len1 : len2; for (i = 0; i < len; i++) { str3[len3++] = str2[i]; str3[len3++] = str1[i]; } str3[len3] = str2[i]; revert(str3, len3); printf("%s\n", str3); return 0; }
#include <stdio.h> #include <string.h> #define N 100 void sort(int opt,char str[],int len) { int i,j,min; char ch; for(i=opt;i<len;i++) { min=i; for(j=i+2;j<len;j+=2) { if(str[j]<str[min]) min=j; } if(min!=i) { ch=str[i]; str[i]=str[min]; str[min]=ch; } } } void transformation(char str[]) { int num,i=0,j,temp[4]; while(str[i]!='\0') { if((str[i]>='0'&&str[i]<='9')||(str[i]>='a'&&str[i]<='f') ||(str[i]>='A'&&str[i]<='F')) { for(j=0;j<4;j++) temp[j]=0; if(str[i]>='0'&&str[i]<='9') num=str[i]-'0'; else if(str[i]>='a'&&str[i]<='f') num=str[i]-'a'+10; else num=str[i]-'A'+10; j=0; while(num>0) { temp[j++]=num&1; num>>=1; } for(j=0;j<4;j++) { num*=2; num+=temp[j]; } if(num<=9) str[i]=num+'0'; else str[i]=num-10+'A'; } i++; } } int main() { char str[2*N],str1[N],ch; int i,j,min,len; scanf("%s%s",str,str1); //合并字符串 strcat(str,str1); len=strlen(str); //偶数下标的字符进行排序 sort(0,str,len); //奇数下标的字符进行排序 sort(1,str,len); //字符串转换 transformation(str); printf("%s\n",str); return 0; }
#include<stdio.h> #include<string.h> #include<math.h> #define Size 256 void swap(char *a,char *b){ char t=*a; *a=*b,*b=t; } void jinzhi(char a) { int t; int b[16]={0}; int c[16]={0}; if((a>='0'&&a<='9')||(a>='a'&&a<='f')||(a>='A'&&a<='F')){ if(a>='0'&&a<='9')t=a-48; else if(a>='a'&&a<='f')t=a-97+10; else if(a>='A'&&a<='F')t=a-65+10; int i=0; while(t){ b[i++]=t%2; t/=2; } int sum=0; for(int j=0;j<4;j++){ int m=b[j]*pow(2,4-j-1); sum+=m; } if(sum>=0&&sum<=9)printf("%d",sum); else{ printf("%c",sum+55); } }else{ printf("%c",a); } } int main() { char str1[Size]={0}; char str2[Size]={0}; while(scanf("%s %s",str1,str2)!=EOF){ strcat(str1,str2); char ji[Size]={0}; char ou[Size]={0}; //奇数下标的取值和排序 for(int i=1,j=0;i<strlen(str1);i+=2){ ji[j++]=str1[i]; } for(int i=0;i<strlen(ji);i++){ for(int j=i+1;j<strlen(ji);j++){ if(ji[i]>ji[j])swap(&ji[i],&ji[j]); } } //偶数下标取值和排序 for(int i=0,j=0;i<strlen(str1);i+=2){ ou[j++]=str1[i]; } for(int i=0;i<strlen(ou);i++){ for(int j=i+1;j<strlen(ou);j++){ if(ou[i]>ou[j])swap(&ou[i],&ou[j]); } } //得到排序后的字符 char str[Size]={0}; for(int i=0,j=1;i<strlen(ji);i++,j+=2)str[j]=ji[i]; for(int i=0,j=0;i<strlen(ou);i++,j+=2)str[j]=ou[i]; //进行进制转换 for(int i=0;i<strlen(str);i++){ jinzhi(str[i]); } printf("\n"); } return 0; }
#include <stdio.h> #include <string.h> /* step1:暴力scanf step2:间隔为2的选择排序 step3:暴力字典映射 */ char dic1[] ={"0123456789abcdefABCDEF"}; char dic2[] ={"084C2A6E195D3B7F5D3B7F"}; void selectSort(char * in, int beginIndex); int main(void) { char in[202]; while( scanf("%s ", in) !=EOF && scanf("%s\n", in + strlen(in) ) != EOF ) { selectSort(in, 0); selectSort(in, 1); for(int i=0; i<strlen(in); i++){ //字典映射替换 if('0' <= in[i] && in[i] <= '9' || 'a' <= in[i] && in[i] <= 'f' || 'A' <= in[i] && in[i] <= 'F' ) in[i] = dic2 [ strchr( dic1 , in[i] ) - dic1 ]; } printf("%s\n", in); } return 0; } void selectSort(char * in, int beginIndex) { for(int i=beginIndex; i<strlen(in)-1; i+=2){ char tmp; int s=i; for(int j=i+2; j<strlen(in); j+=2){ if(in[j]<in[s]){ s = j; } } tmp = in[i]; in[i] = in[s]; in[s] = tmp; } }
#include <stdio.h> #include <stdlib.h> #include <string.h> char func(char str) { int temp; if(str<='9'&&str>='0') { temp=str-'0'; } else if(str<='f'&&str>='a') { temp=str-'a'+10; } else if(str<='F'&&str>='A') { temp=str-'A'+10; } int bin[4]={0}; int i=0; while(temp!=0) { bin[i++]=temp%2; temp/=2; } temp=bin[0]*pow(2,3)+bin[1]*pow(2,2)+bin[2]*pow(2,1)+bin[3]*pow(2,0); char result; if(temp>9) { result=temp-10+'A'; } else { result=temp+'0'; } return result; } int main() { char input[1000]; int i,j; while(gets(input)) { int len=strlen(input); for(i=0;i<len;i++) { if(input[i]==' ') { for(j=i;j<len-1;j++) { input[j]=input[j+1]; } input[len-1]='\0'; break; } } len=strlen(input); for(i=0;i<len-2;i=i+2) { for(j=0;j<len-2-i;j=j+2) { if(input[j]>input[j+2]) { char temp; temp=input[j]; input[j]=input[j+2]; input[j+2]=temp; } } } for(i=0;i<len-2;i=i+2) { for(j=1;j<len-2-i;j=j+2) { if(input[j]>input[j+2]) { char temp; temp=input[j]; input[j]=input[j+2]; input[j+2]=temp; } } } for(i=0;i<len;i++) { if((input[i]<='9'&&input[i]>='0')||(input[i]<='f'&&input[i]>='a')||(input[i]<='F'&&input[i]>='A')) { input[i]=func(input[i]); } } printf("%s\n",input); } return 0; }