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

C语言数组最小众数统计程序反向用例无输出问题排查

问题诊断

你遇到的问题核心是两处明显错误,所谓「反向排列数组异常」只是未初始化变量的随机值导致的巧合,和数组输入顺序无关:

  • 变量未初始化:寻找最小最高频数字的循环中,int min; 未初始化,属于野值,第一次测试用例运行时野值刚好小于最高频率2,条件触发正常输出;第二次测试用例运行时野值大于等于2,arr[i] > min 条件永远不成立,因此无对应数字输出。
  • 逻辑冗余错误:你已经提前计算出了最高频率freq,不需要再重复比较频率大小,直接从小到大遍历计数数组,第一个出现arr[i] == freq的下标就是你需要的最小最高频数字。
  • 隐含风险:如果输入的数字大于等于200000,会触发数组越界访问,导致不可预期的结果,建议先确认输入数字的取值范围,或者改用哈希表做计数。

修复后代码

#include <stdio.h>
int main(){
    long long t, n;
    scanf("%lld",&t); //输入测试用例总数
    for(int x=0;x<t;x++) {
        scanf("%lld",&n); //输入当前用例的数组长度
        long long arr[200000]={0};
        long long i, count, freq=0;
        for(i=0; i<n; i++){
            scanf("%lld", &count); //输入数组元素并计数
            // 若输入数字可能超过199999,可在此处加边界判断避免越界
            arr[count]++;
        }
        // 计算最高出现频率
        for(i=0; i<200000; i++){
            if(arr[i] > freq){
                freq = arr[i];
            }
        }
        printf("Case #%d: %lld\n",x+1,freq);
        // 从小到大遍历,第一个匹配最高频率的就是最小最高频数字
        for(i=0; i<200000; i++){
            if(arr[i] == freq){
                printf("%lld\n",i);
                break; // 找到后直接退出,保证取到最小值
            }
        }
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:45:00