【问题标题】:Boolean Logic Question - Two different methods布尔逻辑问题 - 两种不同的方法
【发布时间】:2025-12-06 12:05:01
【问题描述】:

我想出了解决问题的两种不同方法,虽然两种方法看起来都合乎逻辑,但只有一种方法有效。基本上,如果所有未被淘汰的剩余候选人的最小票数相同,则该函数将返回 true,否则返回 false。两种方法如下:

1

bool is_tie(int min)
{
    for (int i = 0; i < candidate_count; i++)
    {
        if (!candidates[i].eliminated)
        {
            if (candidates[i].votes != min)
                return false;
        }
    }
    return true;   
}

2

bool is_tie(int min)
{
    for (int i = 0; i < candidate_count; i++)
    {
        if (!candidates[i].eliminated)
        {
            if (candidates[i].votes == min)
                return true;
        }
    }
    return false;   
}

我看不出上面两个代码函数之间有任何逻辑差异。那为什么第二个是错的呢?

【问题讨论】:

    标签: boolean cs50 boolean-logic boolean-operations booleanquery


    【解决方案1】:

    如果任何一位候选人投了除最低票数之外的任何票,那么您标记为 1 的代码将返回 false。

    如果任何一位候选人投了最低票,则标记为 2 的代码返回 true。

    因此,考虑一下有两名候选人的情况,一名投了最低票,另一名没有投最低票。您标记为 1 的代码返回 false,因为一名候选人的投票不是最低投票数。标记为 2 的代码返回 true,因为一位候选人确实投了最低票。

    【讨论】:

    • 谢谢大卫!这很有意义。如果我想坚持确保所有人都投票最低的方法,而不是寻找没有投票的人,我该如何修改第 2 部分中的代码以确保它仍然给我正确的结果?如果你愿意,你可以简单地给我一个伪代码。谢谢!
    • @User12 你最终会把它变成第 1 部分中的代码。