首页 > 解决方案 > 布尔逻辑问题 - 两种不同的方法

问题描述

我想出了两种不同的解决问题的方法,虽然两种方法看起来都合乎逻辑,但只有一种方法有效。基本上,如果所有未被淘汰的剩余候选人的最小票数相同,则该函数将返回 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;   
}

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

标签: booleancs50boolean-logicboolean-operationsbooleanquery

解决方案


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

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

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


推荐阅读