酷代码 AI
菜单
服务商
DeepSeek字节豆包
更多选项

C++统计整数最高频率次数的实现与代码详解

根据题目要求,我们需要统计一组整数中出现频率最高的那个数出现的次数。 题目明确要求使用 `memset` 和 `max` 函数,并且数字大小不超过 100,因此可以采用**计数数组**的方法。 ## 🧠 解题思路 1. 因为每个整数不超过 100,所以我们可以开辟一个长度为 101 的数组(下标 0~100)来记录每个数字出现的次数。 2. 先用 `memset` 将计数数组初始化为 0。 3. 遍历输入的所有数字,对每个数字 `x`,执行 `cnt[x]++`。 4. 遍历计数数组,用 `max` 函数更新最大出现次数。 5. 输出最大出现次数。 --- ## 💻 C++ 代码实现 ```cpp #include <iostream> #include <cstring> // 使用 memset #include <algorithm> // 使用 max(或直接比较) using namespace std; int main() { int n; cin >> n; int cnt[101]; // 因为数字 <= 100 memset(cnt, 0, sizeof(cnt)); // 初始化所有计数为 0 for (int i = 0; i < n; i++) { int x; cin >> x; cnt[x]++; // 统计每个数字出现次数 } int maxCount = 0; for (int i = 0; i <= 100; i++) { maxCount = max(maxCount, cnt[i]); // 更新最大频率 } cout << maxCount << endl; return 0; } ``` --- ## 📘 代码关键点解释 - **`memset(cnt, 0, sizeof(cnt))`**: 将 `cnt` 数组的所有字节都设置为 0,这是初始化数组的常用高效方法。`sizeof(cnt)` 会自动计算整个数组的大小(单位字节),无需手动写长度。 - **`max(maxCount, cnt[i])`**: 这是 C++ 标准库 `<algorithm>` 中的函数,返回两个数中的较大值。每次循环将当前数字的出现次数与历史最大值比较并更新。 - **数组大小 101**: 因为输入整数范围为 `0 ≤ 每个整数 ≤ 100`,包括 100 本身,所以数组下标需要到 100,即长度 101。 --- ## 📊 样例验证 **样例1** 输入: ``` 7 4 5 5 1 5 1 5 ``` 计数数组结果:`cnt[1]=2, cnt[4]=1, cnt[5]=4` 最大次数 = `4`,输出 `4` ✅ **样例2** 输入: ``` 9 8 8 7 4 4 4 3 7 1 ``` 计数数组结果:`cnt[8]=2, cnt[7]=2, cnt[4]=3, cnt[3]=1, cnt[1]=1` 最大次数 = `3`,输出 `3` ✅ --- ## ⚠️ 开发建议与注意事项 - **边界考虑**:虽然题目保证 `n > 1`,但建议仍对 `n=1` 的情况做兼容(虽然不会出现)。 - **内存与性能**:数组长度固定为 101,非常节省空间,时间复杂度为 `O(n + 101)`,在题目限制下完全无忧。 - **头文件选择**:`<cstring>` 用于 `memset`,`<algorithm>` 用于 `max`。如果不使用 `max`,也可以直接写 `if (cnt[i] > maxCount) maxCount = cnt[i];`。 - **常见陷阱**:不要忘记 `memset` 的第三个参数必须是字节数,一般用 `sizeof(cnt)` 即可,不要手动写 `101 * sizeof(int)` 或写成 `101`,容易出错。 --- ######[AI写代码神器 | 865点数解答 | 2026-08-21 22:02:06]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]