2019ECNU机试04 发表于 2020-04-12 | 分类于 华师机试 | 评论数: | 热度: ℃ 本文字数: 7.2k | 阅读时长 ≈ 7 分钟 Code12345678910111213141516171819202122232425262728293031323334353637#include <iostream>#include <cstring>using namespace std;int getIdx(char c){ //小写字母 if(c>=97) return c-'a'+26; return c-'A';}void fun(){ char str1[51],str2[51]; scanf("%s%s",str1,str2); char res[52]={'\0'}; int len1 = strlen(str1); int len2 = strlen(str2); for(int i=0;i<len1;i++){ int idx = getIdx(str1[i]); if(res[idx]=='\0') res[idx]=str1[i]; } for(int j=0;j<len2;j++){ int idx = getIdx(str2[j]); if(res[idx]=='\0') res[idx]=str2[j]; } for(int i =0;i<52;i++){ if(res[i]!='\0') printf("%c",res[i]); }} 12345678910111213141516171819202122232425262728293031323334353637383940414243//利用二路归并,但个人感觉第一种方法好点#include <iostream>#include <string>#include <algorithm>using namespace std;void merge(string str1,string str2,int len1,int len2,char* res) { int idx1=0, idx2=0,idx=0; while (idx1<len1&& idx2<len2) { if (str1[idx1] == str2[idx2]) { res[idx++] = str1[idx1]; idx1++; idx2++; } else if (str1[idx1] < str2[idx2]) res[idx++] = str1[idx1++]; else res[idx++] = str2[idx2++]; } while(idx1 < len1)res[idx++] = str1[idx1++]; while (idx2 < len2)res[idx++] = str2[idx2++]; res[idx++] = '\0';}int fun() { string str1, str2; cin >> str1 >> str2; sort(str1.begin(),str1.end()); sort(str2.begin(), str2.end()); int len1 = str1.size(); int len2 = str2.size(); char* c = new char[len1+ len2+1]; merge(str1, str2, len1, len2, c); printf("%s",c); return 0;} ----\(˙<>˙)/----赞赏一下吧~ 打赏 微信支付 支付宝 本文作者: wicherQAQ 本文链接: https://wicherqaq.github.io/2020/04/12/2019ECNU%E6%9C%BA%E8%AF%9504/ 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!