AlenaNuna

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

HJ30 字符串合并处理

题面:https://www.nowcoder.com/practice/d3d8e23870584782b3dd48f26cb39c8f?tpId=37&tqId=21253&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=

没什么好说的,就是很简单粗暴的大模拟,顶多有的细节可以偷一下懒。

只要把各个部分划分成子程序就很难出错了。

顺带一提,华为真的很喜欢考字符串模拟啊,弄很多细节恶心你。不过写代码时逻辑清晰一点,习惯好一点,就很难出错了。

复制代码
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 char str2[110];
 4 char s[220],s1[110],s2[110];
 5 int len,l1,l2,ShiLiu[220],FZ2[220][5];
 6 char Ans[220];
 7 void Into16(int u){
 8     char c=s[u];
 9     if(c>='0'&&c<='9'){
10         ShiLiu[u]=c-'0';
11         return;
12     }
13     if(c>='A'&&c<='F'){
14         ShiLiu[u]=c-'A'+10;
15         return;
16     }
17     if(c>='a'&&c<='f'){
18         ShiLiu[u]=c-'a'+10;
19         return;
20     }
21     return;
22 }
23 void Work2(int u){
24     int x=ShiLiu[u],t,cnt=0;
25     for(int i=0;i<=3;i++){
26         t=1<<i;
27         ++cnt;
28         if(t&x)FZ2[u][cnt]=1;else FZ2[u][cnt]=0;
29     }
30     FZ2[u][0]=cnt;
31     return;
32 }
33 void Into16_2(int u){
34     int cnt=FZ2[u][0];
35     int x=0,t=1;
36     for(int i=cnt;i>=1;i--){
37         x=x+FZ2[u][i]*t;
38         t*=2;
39     }
40     if(x>=0&&x<=9)Ans[u]=x+'0';
41     if(x>=10)Ans[u]=x-10+'A';
42     return;
43 }
44 bool Check(int u){
45     char c=s[u];
46     if(c>='0'&&c<='9')return 1;
47     if(c>='A'&&c<='F')return 1;
48     if(c>='a'&&c<='f')return 1;
49     return 0;
50 }
51 int main(){
52     scanf("%s%s",s,str2);
53     strcat(s,str2);
54     len=strlen(s);
55     l1=0;l2=0;
56     for(int i=0;i<len;i+=2){
57         s1[l1++]=s[i];
58     }
59     for(int i=1;i<len;i+=2)
60         s2[l2++]=s[i];
61     sort(s1,s1+l1);
62     sort(s2,s2+l2);
63     l1=0;l2=0;
64     for(int i=0;i<len;i+=2)
65         s[i]=s1[l1++];
66     for(int i=1;i<len;i+=2)
67         s[i]=s2[l2++];
68     for(int i=0;i<len;i++){
69         if(Check(i)){
70             Into16(i);
71             Work2(i);
72             Into16_2(i);
73         }
74         else Ans[i]=s[i];
75     }
76     puts(Ans);
77     return 0;
78 }
复制代码

 

posted on   AlenaNuna  阅读(9)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示