c语言 数据分组,问题 B: 分组统计

这是一个关于使用C语言进行数据分组统计的问题,要求根据输入的数字和它们的分组,统计每组中各数字的出现次数。通过哈希算法解决,涉及到排序、二维数组和计数操作。示例给出了不同解决方案的代码实现。
摘要由CSDN通过智能技术生成

分组统计

问题 B: 分组统计时间限制: 1 Sec 内存限制: 32 MB

提交: 416 解决: 107

[提交][状态][讨论版][命题人:外部导入]

题目描述

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

输入

输入第一行表示样例数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}

思考

这个是典型的哈希算法了。

这个样例是统计每组数字里面各数字(出现在第一行的数字,这一次是3,2,8)的个数。

所以每一组数字要个数组3,记录2,3,8的个数

先搞一个在n个数字第一次出现时的数组num,记录那些数字出现了,出现了几次,以该数字为下标的数组值++,那这个数组大小应该是很大的啊 。

再来就是分组了,再来一个数组zu,以上一行出现过数字为下标,值为所分的组。

n不超过100。怎么表示这种性质呢?结构体?一个整型,记录其在第一行的n个数里的出现次数,再来一个数组,记录自己在不同组的出现次数。

组数肯定要小于n

本地实现

这问题几个月之前就遇到过了。

#include

#include

#include

//#include

#define maxn 10005

int cmp(const void*a, const void*b){

return *(int*)a - *(int*)b;//升序

}

int main(){

int m;

while(scanf("%d", &m) != EOF){

while(m--){

int n;

scanf("%d", &n);

int cishu[maxn][n+1]= {0};

//int temp[n+1] = INT_MAX;

int temp[n+1] = {0};

for(int i = 1; i <= n; i++){

scanf("%d", &temp[i]);

cishu[temp[i]][0]++;//将第一行数读入数组temp,并且在相应行第0列记录出现在第一行出现次数

}

int zu[n+1] = {0}, num = 0, kzu[n+1] = {0};

<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值