【问题标题】:CS50 plurality - unable to print if there are too many winnersCS50 复数 - 如果获奖者太多,则无法打印
【发布时间】:2022-06-28 12:41:48
【问题描述】:

在多个prblm中,我设法更新了每个候选人的投票,我的代码可以打印一个获胜者,但如果他们有很多获胜者,仍然会卡住。 通过提示或线索提供帮助,而不是整个解决方案。 提前致谢。

void print_winner(void)
{
    int v = 0; //maximum number of votes
    string w; //winner of the election
    for (int i = 0; i < candidate_count; i++)
    {
        if (v <= candidates[i].votes)
        {
            v = candidates[i].votes;
        }
    }
    

    for (int j = 0; j < candidate_count; j++)
    {
        if (candidates[j].votes == v)
        {
            w = candidates[j].name;
        }
    }
    printf("%s\n", w);
    return;
}

【问题讨论】:

  • "prblm"?你的意思是问题?
  • printf 在任何循环之外,所以它只执行一次。而不是分配给w,当然,它只能保存一个值,而是在那里打印名称。
  • 票数相同时,没有赢家,只有连任。
  • 这就是我要找的,如果有很多获奖者如何打印。
  • 将printf 移动到w = 行之后?

标签: c cs50


【解决方案1】:

将您的第二个 for 循环更改为:

for (int j = 0; j < candidate_count; j++)
{
    if (candidates[j].votes == v)
    {
        w = candidates[j].name;
        printf("%s\n", w);
    }
}

【讨论】:

    【解决方案2】:

    您需要将它分成两个 for 循环,如果将它们放在一起,则第一个循环将仅通过第一个获得超过 1 票的候选人运行并打印。因为它没有检查其他人。该循环必须完成并遍历整个集合才能实际找到最大票数。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-23
      • 2022-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-05
      • 2021-03-14
      • 2023-04-04
      相关资源
      最近更新 更多