题解 | 分组统计

分组统计

https://www.nowcoder.com/practice/5cb47b86911c4aa48722e531a51ec823

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int max(int arr[1001], int n) {
    int max = -1000;
    for (int i = 0; i < n; i++) {
        if (arr[i] > max) {
            max = arr[i];
        }
    }
    return max;
}
void tja(int a[1001], int n, int all[1001]) {
    for (int i = 0; i < n; i++) {
        if (a[i] != 0) {
            all[a[i]] = 1;
        }
    }
}
int main() {
    int n, j = 0;
    int m;
    scanf("%d", &m);
    for (int u = 0; u < m; u++) {
        scanf("%d", &n);
        int a[1001] = { 0 };
        int b[1001] = { 0 };
        int arr[1001], all[1000];
        for (int i = 0; i < 1001; i++) {
            arr[i] = 0;
            all[i] = 0;
        }
        for (int i = 0; i < n; i++) {
            scanf("%d", &a[i]);
        }
        for (int i = 0; i < n; i++) {
            scanf("%d", &b[i]);
        }
        int amax = max(a, n);
        int bmax = max(b, n);
        tja(a, n, all);
        for (int i = 1; i < bmax + 1; i++) {
            tja(a, n, all);
            while (j < n) {
                if (b[j] == i) {
                    arr[a[j]]++;
                }
                j++;
            }
            j = 0;
            int flag = 0, q = 0;
            for(int v=0;v<n;v++){
                if(b[v]==i){
                    flag=1;
                }
            }
            if (flag) {
                printf("%d=", i);
                printf("{");
                int first = 1;
                for (int k = 1; k < amax + 1; k++) {
                    if (arr[k] != 0 || all[k] == 1) {
                        if (!first) {
                            printf(",");
                        }
                        if (arr[k] != 0) {
                            printf("%d=%d", k, arr[k]);
                        } else if (all[k] == 1) {
                            printf("%d=0", k);
                        }
                        first = 0;
                    }
                }
                printf("}\n");
                for (int i = 0; i < 1001; i++) {
                    arr[i] = 0;
                    all[i] = 0;
                }
            }
            flag=0;
        }
    }
    return 0;
}

全部评论

相关推荐

04-10 11:56
如皋中学 Java
高斯林的信徒:双c9能简历挂的?
点赞 评论 收藏
分享
JamesGosling1:同一个公司的实习为什么写三次,就算是不同的小组的话,直接写一段要好点吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务