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

CS50 P-Set3 Runoff作业:print_winner函数测试报错求助

问题分析与修复

你的代码中print_winner函数存在两处问题,直接导致了测试失败:

  1. 多数票判定逻辑冗余且易出错
    你用round(voter_count / 2 + 1)计算多数票,但整数除法本身会向下取整,再叠加round完全多余。更准确的判定逻辑应该是得票数严格超过选民总数的一半,直接通过candidates[i].votes > voter_count / 2即可实现,既简洁又避免整数运算误差。

  2. 输出格式不符合测试要求
    打印获胜者名字时,你使用printf("%s", name);,但测试期望输出的名字后必须带换行符。缺少换行符会导致输出内容不完整,被测试判定为未正确打印获胜者。

修改后的print_winner函数

bool print_winner(void)
{
    for (int i = 0; i < candidate_count; i++)
    {
        if(candidates[i].votes > voter_count / 2)
        {
            printf("%s\n", candidates[i].name);
            return true;
        }
    }
    return false;
}

补充说明

  • 多数票的核心要求是得票超过半数:比如10个选民需要至少6票,5个选民需要至少3票。用> voter_count / 2在整数除法下刚好能准确匹配这个逻辑(10/2=5,6>5;5/2=2,3>2)。
  • 换行符\n是测试验证输出的必要格式要求,必须添加。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:55:01