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

CS50 plurality项目print_winner平局未输出多名获奖者修复咨询

问题原因

你当前print_winner函数的核心错误是排序逻辑只交换了候选人的姓名字段,没有同步交换对应的得票数字段,导致排序后候选人姓名和得票数完全错位,无法正确识别所有最高得票的候选人,因此触发了平局场景下的校验失败。

需要修改的内容
  • 移除不必要的全局变量string x,交换逻辑用到的临时变量可以直接定义在print_winner函数内部
  • 排序交换操作需要同时同步候选人的姓名和得票数,最简单的实现是直接交换整个candidate结构体
修改后的完整print_winner代码
void print_winner(void) {
    // 按得票数升序排序所有候选人
    for (int i = 0; i < candidate_count - 1; i++) {
        for (int j = i + 1; j < candidate_count; j++) {
            if (candidates[j].votes < candidates[i].votes) {
                // 直接交换整个候选人结构体,保证姓名和得票数同步
                candidate temp = candidates[i];
                candidates[i] = candidates[j];
                candidates[j] = temp;
            }
        }
    }
    
    int max_votes = candidates[candidate_count - 1].votes;
    // 遍历打印所有获得最高票的候选人
    for (int k = 0; k < candidate_count; k++) {
        if (candidates[k].votes == max_votes) {
            printf("%s\n", candidates[k].name);
        }
    }
    return;
}

修改后重新编译运行即可通过所有check50校验项。

内容的提问来源于stack exchange,提问作者Francesca Di Paola

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:57:02