boolean - 布尔逻辑问题 - 两种不同的方法
问题描述
我想出了两种不同的解决问题的方法,虽然两种方法看起来都合乎逻辑,但只有一种方法有效。基本上,如果所有未被淘汰的剩余候选人的最小票数相同,则该函数将返回 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个是错误的呢?
解决方案
如果任何一位候选人投了除最低票数之外的任何票,则标记为 1 的代码将返回 false。
如果任何一位候选人投了最低票,则标记为 2 的代码返回 true。
所以考虑一下有两名候选人的情况,一名投最低票,另一名没有投最低票。您标记为 1 的代码返回 false,因为一名候选人的投票不是最低投票数。您标记为 2 的代码返回 true,因为一位候选人确实投了最低票。
推荐阅读
- android - Xamarin Android BottomBarBadge 无法正确显示 100+ 的计数
- r - 从命令提示符在 .Rmd 上运行 .Rexec
- scikit-learn - 如何为添加到 CountVectorizer 转换数据的非文本特征设置名称?
- sql - 给定日期的最大日期 - sql
- linux - 比较两个文件并打印匹配数据
- wordpress - Woocommerce 在购物车后添加钩子不起作用
- firebase - 如何从 firebase 查询返回任何类型的 Observable
- ios - 如何从 Maps Swift 中当前位置的反向地理编码中获取 countryShortName、division、stateShortName、subLocality 等字段
- jquery - BS4 在卡体外点击时关闭手风琴
- java - 在java中通过基于soap的ws发送xml消息