C语言程序:寻找出现次数最多的数字 - 代码解析及优化
#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n#define MAXN 1005 // 定义最大的数组长度\n#define MAXK 15 // 定义最大的k值\n\nint n, cnt[MAXN]; // n为数组个数,cnt数组用于统计每个数出现的次数\nint *p[MAXN][MAXK]; // p数组用于存储输入的数组\n\n// qsort的比较函数,用于排序\nint cmp(const void *a, const void *b) {\n return *(int *)a - *(int *)b;\n}\n\nint main()\n{\n scanf("%d", &n); // 输入数组个数\n for (int i = 0; i < n; ++i)\n {\n int k;\n scanf("%d", &k); // 输入每个数组的长度\n for (int j = 0; j < k; ++j)\n {\n p[i][j] = (int *)malloc(sizeof(int)); // 为每个元素分配内存\n scanf("%d", p[i][j]); // 输入每个元素的值\n }\n qsort(p[i], k, sizeof(int *), cmp); // 对每个数组进行排序\n }\n\n int max = -1, maxIndex = -1; // max用于记录出现次数最多的数的次数,maxIndex用于记录该数的值\n for (int i = 0; i < n; ++i)\n for (int j = 0; j < MAXK; ++j)\n if (p[i][j] != NULL) // 遍历每个数组的元素\n {\n int k = *p[i][j]; // 获取当前元素的值\n ++cnt[k]; // 更新该值出现的次数\n if (cnt[k] > max || (cnt[k] == max && k > maxIndex))\n {\n max = cnt[k]; // 更新出现次数最多的数的次数\n maxIndex = k; // 更新出现次数最多的数的值\n }\n free(p[i][j]); // 释放当前元素的内存\n }\n\n printf("%d %d\n", maxIndex, max); // 输出出现次数最多的数的值和次数\n return 0;\n}
原文地址: https://www.cveoy.top/t/topic/qd5k 著作权归作者所有。请勿转载和采集!