在一行上输入两个长度
,由大小写字母和数字构成的字符串
和
,代表待处理的字符串。
输出处理后的最终字符串。
dec fab
5D37BF
在这个样例中,全过程描述如下:
【合并阶段】
第一步合并得到
;
第二步排序得到
。
【调整阶段】
对于第一个字符
,其十进制数为
,二进制数为
,翻转后得到
,再转换回十六进制数为
;
第二个字符
,翻转
;
第三个字符
,翻转
;
第四个字符
,翻转
;
第五个字符
,翻转
;
第六个字符
,翻转
。
abV CDw
B3VD5w
在这个样例中,全过程描述如下:
【合并阶段】
第一步合并得到
;
第二步排序得到
。
【调整阶段】
对于第一个字符
,其十进制数为
,二进制数为
,翻转后得到
;
第二个字符
,翻转
;
第三个字符
,跳过该字符;
第四个字符
,翻转
;
第五个字符
,翻转
;
第六个字符
,跳过该字符。
123 15
88C4A
在这个样例中,全过程描述如下:
【合并阶段】
第一步合并得到
;
第二步排序得到
。
【调整阶段】
对于第一、二个字符
,其十进制数为
,二进制数为
,翻转后得到
,再转换回十六进制数为
;
第三个字符
,翻转
;
第四个字符
,翻转
;
第五个字符
,翻转
。
本题已于下方时间节点更新,请注意题解时效性:
1. 2025-05-15 更新题面。
2. 2024-12-14 更新题面。
#include <stdio.h>
#include<string.h>
int main() {
char s[201], t[101];
scanf("%s %s", s, t);
strcat(s, t);//将t连接至s
int i, j;
char temp;
for (i = strlen(s); i > 0; i--) {
for (j = 2; j < i; j = j + 2) {
if (s[j - 2] > s[j]) {
temp = s[j - 2];
s[j - 2] = s[j];
s[j] = temp;
}
}
}
for (i = strlen(s); i > 0; i--) {
for (j = 3; j < i; j = j + 2) {
if (s[j - 2] > s[j]) {
temp = s[j - 2];
s[j - 2] = s[j];
s[j] = temp;
}
}
}//排序
for (i = 0; i < strlen(s); i++) {
if (s[i] == '0')printf("0");
else if (s[i] == '1')printf("8");
else if (s[i] == '2')printf("4");
else if (s[i] == '3')printf("C");
else if (s[i] == '4')printf("2");
else if (s[i] == '5')printf("A");
else if (s[i] == '6')printf("6");
else if (s[i] == '7')printf("E");
else if (s[i] == '8')printf("1");
else if (s[i] == '9')printf("9");
else if (s[i] == 'a' || s[i] == 'A')printf("5");
else if (s[i] == 'b' || s[i] == 'B')printf("D");
else if (s[i] == 'c' || s[i] == 'C')printf("3");
else if (s[i] == 'd' || s[i] == 'D')printf("B");
else if (s[i] == 'e' || s[i] == 'E')printf("7");
else if (s[i] == 'f' || s[i] == 'F')printf("F");
else printf("%c", s[i]);
}//转化
return 0;
} 由于这题逻辑很简单,可以手动计算转化结果然后输出
#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;
}