-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path问题B:分组统计.cpp
43 lines (41 loc) · 1.4 KB
/
问题B:分组统计.cpp
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
32
33
34
35
36
37
38
39
40
41
42
43
//不使用标准库的做法
#include <cstdio>
#include <cstring>
const int maxn=2000;
int hashTable[maxn][maxn];
int main(){
memset(hashTable,0,sizeof(hashTable));
int m,n,a[101],t;
scanf("%d",&m);
while(m--){
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
hashTable[0][a[i]]=1;//哈希表第0行作为组元素输出标志,为1输出
}
for(int i=0;i<n;i++){
scanf("%d",&t);
hashTable[t][a[i]]++;//第t组的数字a[i]加一
hashTable[t][0]=1;//哈希表第0列作为组号输出标志,为1输出
}
//输出过程(双for循环)
for(int i=0;i<maxn;i++){
if(hashTable[i][0]==1){//存在第i组
printf("%d={",i);
bool flag=false;//控制逗号的输出,false不输出
for(int j=0;j<maxn;j++){
if(hashTable[0][j]==1){//i组中存在该数
if(flag)
printf(",");
else
flag=true;//下一个数据前输出逗号
printf("%d=%d",j,hashTable[i][j]);
}
}
printf("}\n");
}
}
memset(hashTable,0,sizeof(hashTable));
}
return 0;
}