分组统计

分组统计

http://www.nowcoder.com/questionTerminal/5cb47b86911c4aa48722e531a51ec823

这题有的条件没给清楚。。数字范围应该是小于等于1000,组数是小于等于100(调bug调了俩小时发现是hash数组的列应该赋1001而我赋了1000!!!)
思路:用一个二维数组来存储每一组中某一数字的个数。行标作为组号,列标为数字,值为次数。

#include<stdio.h>
#include<string.h>
int main()
{
    int m,n;
    scanf("%d",&m);
    while(m--)
    {
        int hash[100][1001];
        memset(hash,-1,sizeof(hash)); // 初始设-1以便后面确定哪一组是合法的
        scanf("%d",&n);
        int num[n]; // 存储读入的n个数字
        int flag[1001] ={0}; // 标记哪些数字出现过
        int group,numcnt = 0; // numcnt为不同的数字个数
        for(int i = 0;i<n;i++)
        {
            scanf("%d",&num[i]);
            if(!flag[num[i]]) // flag设1
            {
                flag[num[i]] = 1;
                numcnt ++; // 不同数字个数加1
            }
        }
        int max = 0; // 最大组号(由于不确定组号是顺序从1到n还是怎样)
        for(int i = 0;i<n;i++) //读组号并更新hash
        {
            scanf("%d",&group);
            if(hash[group][0] == -1) // 令这一行为合法的(设0)
                for(int j = 0;j<1001;j++)
                    hash[group][j] = 0;
            hash[group][num[i]] ++; // 对应的group行,num[i]列加1
            if(group > max) // 找出最大组号
                max = group;
        }
        for(int i = 0;i<=max;i++) // 从0开始到最大组号遍历hash
        {
            if(hash[i][0] != -1) // 当且仅当组号合法时再输出
            {
                int cnt2 = 0; // 用于找出flag为1的数字
                printf("%d={", i);
                for (int j = 0; j < numcnt; j++) // 每一组的大括号里面就numcnt个数字
                {
                    while (!flag[cnt2++]); // 找出当前flag为1的数字
                    if (j != numcnt - 1)
                        printf("%d=%d,", cnt2 - 1, hash[i][cnt2 - 1]);
                    else
                        printf("%d=%d", cnt2 - 1, hash[i][cnt2 - 1]);
                }
                printf("}\n");
            }
        }
    }
    return 0;
}
全部评论
谢谢!网上一堆人都用二维数组,但是都没说题目条件不充分的问题。
点赞 回复 分享
发布于 2021-02-21 15:44

相关推荐

不愿透露姓名的神秘牛友
07-02 17:28
25届每天都在焦虑找工作的事情0offer情绪一直很低落硬撑着面了一个岗位岗位有应酬的成分面试的时候hr给我出各种场景题问的问题比较犀利&nbsp;有点压力面的感觉感觉有点回答不上来本来就压抑的情绪瞬间爆发了呢一瞬间特别想哭觉得自己特别没用没绷住掉眼泪了事后想想觉得自己挺有病的&nbsp;真的破大防了
喜欢唱跳rap小刺猬...:我觉得没关系吧,之前有一次面试leader给我压力面,我顶住了压力,结果入职的时候发现组里氛围很差,果断跑路。其实从面试就能大概看出组的情况,面试体验好的组倒是不一定好,但是面试体验不好的组。。。就很难说
点赞 评论 收藏
分享
仁者伍敌:牛子这些人还会点一个自动回复,boss都不带回复的
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-30 18:19
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务