算法笔记配套题 codeup100000582 问题 B: 分组统计

题目链接:http://codeup.cn/problem.php?cid=100000582&pid=1

题目描述

先输入一组数,然后输入其分组,按照分组统计出现次数并输出,参见样例。

输入

输入第一行表示样例数m,对于每个样例,第一行为数的个数n,接下来两行分别有n个数,第一行有n个数,第二行的n个数分别对应上一行每个数的分组,n不超过100

输出

输出m行,格式参见样例,按从小到大排。

样例输入

1
7
3 2 3 8 8 2 3
1 2 3 2 1 3 1

样例输出

1={2=0,3=2,8=1}
2={2=1,3=0,8=1}
3={2=1,3=1,8=0}
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
//1113bites
int main(){
	int m=0;
	while(~scanf("%d",&m)){
		while(m--){
			int num1[110],num2[110],y1=0,y2=0,n=0,sl[110],nl[110],max=0;
			//用hash1给num1去重	
			int hashTable1[100010]={0};
			//用hash2给num2去重 
			int hashTable2[100010]={0};
			scanf("%d",&n);
			for(int i=0;i<n;i++){
				scanf("%d",&num1[i]);
				if(hashTable1[num1[i]]==0){
					sl[y1++]=num1[i];
					hashTable1[num1[i]]++;
				}
			} 
			sort(sl,sl+y1);
			for(int i=0;i<n;i++){
				scanf("%d",&num2[i]);
				if(hashTable2[num2[i]]==0){
					nl[y2++]=num2[i];
					hashTable2[num2[i]]++;
				}
			}
			sort(nl,nl+y2);
			int sout[nl[y2-1]+10][sl[y1-1]+10];
			memset(sout,0,sizeof(sout));
			//变量不能作为数组的维数 
			for(int i=0;i<n;i++){
				sout[num2[i]][num1[i]]++;
			}
			for(int i=0;i<y2;i++){
				printf("%d={",nl[i]);
				for(int j=0;j<y1;j++){
					printf("%d=%d",sl[j],sout[nl[i]][sl[j]]);
					if(j<y1-1){
						printf(",");
					}
					else{
						printf("}\n");
					}
				}
			}
		}
	} 
	return 0;
}

易错划重点:
1、变量不能作为数组的维数,如果一定要作为维数要对每一个使用的值重新赋初值再加需要的数,或者用memset函数统一赋值。

2、不使用的变量不要定义。

3、有大量数据和循环的时候一定要注意对应关系。

4、哈希表叫做hashTable而不是hash.

5、数组和二维数组初始化,codeup确实容易报错。主要是不要用={0}来初始化,数组在使用的时候对单个赋值,二维数组在使用的时候用memset赋值就会安全很多。

6、while (~scanf("%d%d",&n,&m))
等效于while((scanf("%d%d",&n,&m)!=EOF)
~是按位取反
scanf的返回值是输入值的个数
如果没有输入值就是返回-1
-1按位取反结果是0
while(~scanf("%d", &n))就是当没有输入的时候退出循环

7、在for循环里定义局部数组变量,用cin可以赋值,用scanf无法赋值。

8、输入不止一组。

9、sout二维数组要开出更大的空间

10、

int sout[nl[y2-1]+10][sl[y1-1]+10];
memset(sout,0,sizeof(sout));

不能直接写为:

int sout[nl[y2-1]+10][sl[y1-1]+10]=0;

经验证其它可过oj的答案:
答案1
答案2

发布了28 篇原创文章 · 获赞 0 · 访问量 839

猜你喜欢

转载自blog.csdn.net/weixin_44211856/article/details/104335336