题解 | #字符串合并处理#

字符串合并处理

https://www.nowcoder.com/practice/d3d8e23870584782b3dd48f26cb39c8f

#include <iostream>
#include <bits/stdc++.h>
#include <sstream>
using namespace std;

char change(char c){
    int x;
    if(c >= 'A' && c <= 'F'){
        x = c - 'A' + 10;
    }else if(c >= 'a' && c <= 'f'){
        x = c - 'a' + 10;
    }else if(c >= '0' && c <= '9') {
        x = c - '0';
    }else{
        return c;
    }

    int res = 0;
    // 把第一位移到最后一位, 第二位到倒数第二位, 等等
    for(int i = 0; i <= 3; i ++){
        int t = (x >> (3 - i)) & 1;
        res |= (t << i);
    }
    // 输出16进制
    if(res >= 10){
        return (res - 10) + 'A';
    }else{
        return res + '0';
    }
}

int main() {
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    string line;
    getline(cin, line);
    string a;
    string b;
    stringstream ss(line);
    ss >> a >> b;

    string str = a + b;
    vector<char> even;
    vector<char> odd;
    
    // 添加到奇数偶数数组并排序
    for(int i = 0; i < str.length(); i++){
        if(i & 1){
            odd.push_back(str[i]);
        }else{
            even.push_back(str[i]);
        }
    }
    sort(even.begin(), even.end());
    sort(odd.begin(), odd.end());
  
    // 对于每一个字符, 进行倒序
    for(int i = 0; i < str.length(); i++){
        if(i & 1){
            str[i] = change(odd[i/2]);
        }else{
            str[i] = change(even[i/2]);
        }
    }
    
    
    cout << str << endl;
    
    
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

2025-12-28 16:32
重庆邮电大学 Java
程序员花海:1.技能放最后,来面试默认你都会,技能没啥用 2.实习写的看起来没啥含金量,多读读部门文档,包装下 接LLM这个没含金量 也不要用重构这种 不会给实习生做的 3.抽奖这个还是Demo项目,实际在公司里面要考虑策略,满减,触发点,触发规则 库存 之类的,不是这个项目这么简单 4.教育背景提前,格式为 教育背景 实习 项目 技能 自我评价
简历被挂麻了,求建议
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务