布尔逻辑问题 - 两种不同的方法
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 正确,因为一位候选人确实投了最低票。
我想出了两种不同的解决问题的方法,虽然这两种方法看起来都很合乎逻辑,但只有一种有效。基本上,如果所有未被淘汰的剩余候选人都具有相同的最小票数,则该函数将 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 正确,因为一位候选人确实投了最低票。