AlenaNuna

导航

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 }

 

posted on 2024-09-02 07:03  AlenaNuna  阅读(12)  评论(0编辑  收藏  举报