You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言笔试题:实现含相同频次值额外输出的直方图统计

问题解答

第二部分代码量评估

这道题的第二部分完全不需要编写大量额外代码,也不需要复杂的字符串拼接逻辑,整体仅需10~15行额外代码即可实现。
C语言场景下可以直接边判断边输出,不需要提前拼接完整字符串再打印,核心实现逻辑非常简单:

  1. 先遍历15对应的频次统计结果,找到对应数值数量≥2的频次值(由于数值范围只有15,两层循环的遍历成本可以忽略)
  2. 匹配到符合要求的频次后,依次输出对应数值,仅需用分支判断当前输出的是第几个匹配项,分别处理逗号、and的拼接即可
  3. 最后输出固定后缀和频次值即可

参考实现代码如下:

int target_cnt = 0, match_num = 0;
// 查找符合要求的频次值
for (int cnt = 20; cnt >= 0; cnt--) {
    match_num = 0;
    for (int i = 1; i <= 5; i++) {
        if (histogram[i] == cnt) match_num++;
    }
    if (match_num >= 2) {
        target_cnt = cnt;
        break;
    }
}
// 按要求格式输出
if (match_num >= 2) {
    printf("The values ");
    int printed = 0;
    for (int i = 1; i <= 5; i++) {
        if (histogram[i] == target_cnt) {
            if (printed == 0) {
                printf("%d", i - 1);
            } else if (printed == match_num - 1) {
                printf(" and %d", i - 1);
            } else {
                printf(", %d", i - 1);
            }
            printed++;
        }
    }
    printf(" occur %d times each.\n", target_cnt);
}

考试难度定位评估

这道题完全符合大一计算机专业入门课C语言30分钟纸笔考试的难度定位,理由如下:

  • 所有知识点都是入门级的循环、条件分支操作,没有涉及指针、字符串函数、动态内存等进阶考点
  • 整道题总代码量仅30行左右,纸笔书写耗时不超过15分钟,剩余时间足够完成审题、校验逻辑的工作
  • 第二问的考察目的是逻辑分支处理能力,不是字符串拼接,给出的示例输出已经明确了格式要求,不会出现无意义的考点卡壳情况

内容的提问来源于stack exchange,提问作者Arcturus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 09:45:04