HJ25 数据分类处理
华为好像很喜欢出这种没什么思维难度但是细节很多的题目 >_<
把各个部分拆分成子程序就安全可靠清晰多了。
思路没什么好说的,非常浅显。
值得一提的就是我在 int 转 字符数组类型时图方便用了 stringstream。 多次类型转换时记得清空,t.clear();
然后在字符串匹配时,因为数据范围很小,所以直接用了 strstr 函数。
1 #include<bits/stdc++.h> 2 using namespace std; 3 int I[110],numI,R[110],numR,r[110],numr; 4 int ans[31000],numans=0; 5 char SI[110][11]; 6 void QuChong(){ 7 sort(R,R+numR); 8 r[numr=0]=R[0]; 9 for(int i=1;i<numR;i++) 10 if(R[i-1]!=R[i])r[++numr]=R[i]; 11 numr++; 12 return; 13 } 14 void initWork(){ 15 stringstream t; 16 for(int i=0;i<numI;i++){ 17 t.clear(); 18 t<<I[i]; 19 t>>SI[i]; 20 } 21 return; 22 } 23 bool Check(int x){ 24 char sx[11]; 25 stringstream t; 26 t.clear(); 27 t<<x; 28 t>>sx; 29 bool f=0; 30 int cnt=0; 31 for(int i=0;i<numI;i++){ 32 if(strstr(SI[i],sx)!=NULL){ 33 f=1; 34 cnt++; 35 } 36 } 37 if(!f)return 0; 38 ans[++numans]=cnt; 39 for(int i=0;i<numI;i++){ 40 if(strstr(SI[i],sx)!=NULL){ 41 ans[++numans]=i; 42 ans[++numans]=I[i]; 43 } 44 } 45 return f; 46 } 47 int main(){ 48 cin>>numI; 49 for(int i=0;i<numI;i++)scanf("%d",&I[i]); 50 cin>>numR; 51 for(int i=0;i<numR;i++)scanf("%d",&R[i]); 52 QuChong(); 53 // for(int i=0;i<numr;i++)printf("%d ",r[i]); 54 initWork(); 55 for(int i=0;i<numr;i++){ 56 ans[++numans]=r[i]; 57 if(!Check(r[i])){ 58 numans--; 59 } 60 } 61 ans[0]=numans; 62 for(int i=0;i<=numans;i++) 63 printf("%d ",ans[i]); 64 return 0; 65 }