布尔逻辑问题 - 两种不同的方法

Boolean Logic Question - Two different methods

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

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;   
}

我看不出上面两个代码函数之间有任何逻辑上的区别。那为什么2号错了?

您的代码标记为 1 returns 如果有任何一位候选人投了最低限度以外的任何东西,则为假。

您的代码标记为 2 returns 如果有任何候选人投了最低票,则为真。

因此请考虑有两名候选人的情况,一名投了最少的票,另一名没有投。您的代码标记为 1 returns false,因为一名候选人投票未达到最低要求。您的代码标记为 2 returns 正确,因为一位候选人确实投了最低票。