AlenaNuna

导航

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 2024-09-02 17:00  AlenaNuna  阅读(6)  评论(0编辑  收藏  举报