题解 | 分组统计
分组统计
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; }