CS50多数-如果获奖者太多,则无法打印

628mspwn  于 2022-12-03  发布在  其他
关注(0)|答案(3)|浏览(98)

在多数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;
}
cfh9epnr

cfh9epnr1#

将第二个for循环更改为:

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

k4emjkb12#

你需要把它分成两个for循环,如果你把它们放在一起的话,第一个循环将只运行第一个有超过1票的候选人并打印它。因为它没有检查其他的。这个循环必须完成并遍历整个集合以找到最大的票数。

ubof19bj

ubof19bj3#

我也对同样的问题与您约2或3天现在。但我想我找到了如何打印,如果有多个赢家。
首先,我有一个变量来存储最高票数,并将其初始化为0。然后,我尝试将候选人[i].votes与当前最高票数进行比较。
然后,我将最高选票的新值分配给候选人的选票,直到循环找到比前一个更高的人。
最后,我再一次把所有候选人的票数循环一遍,看看每一个候选人的票数是否等于最高票数,如果是的话,就应该印上他们的名字,这样就解决了我印两个或两个以上获胜者的问题。

相关问题