经典逻辑题:张村李村谁说谎?今天到底星期几?

本贴最后更新于 2231 天前,其中的信息可能已经时移世改

原文地址:https://xeblog.cn/articles/11

从前,在山的那边,海的那边,有一群蓝。。。额,不对,有两个村庄,一个叫张村,一个叫李村。这两个村庄的人串通好了来骗外地人,张村的人星期一三五说谎
,李村的人星期二四六说谎,其它日子都说实话。某一天,来了一个外地人,问今天周几?结果两个村的人都回答“前天是我说谎的日子”,外地人:。。。

以上内容纯属虚构!!!

进入正题。。。

原题是来自 MBA 的入学考试题目

思路(思愁之路)

首先我们能确定的是:如果张、李今天说谎,则张、李前天一定不说谎。反之,如果张、李今天不说谎,则张、李前天一定说谎。

所以,我只需要知道张、李今天和前天是否说谎就可以得出答案了。

废话不多说,直接上码

/** * 张村这天是否说谎 * @param day * @return true表示说谎,false表示不说谎 */ private static boolean zhangIsLie (int day) { return 7 != day && day % 2 != 0; } /** * 李村这天是否说谎 * @param day * @return true表示说谎,false表示不说谎 */ private static boolean liIsLie (int day) { return day % 2 == 0; }

这里解释一下,为什么张村是 7 != day && day % 2 != 0 李村是 day % 2 == 0

因为张村是 1、3、5 不说谎,正好是 奇数,不能被 2 整除,所以这里判断余数不为 0。星期天(7)也是奇数,但是星期天他们都不说谎,所以 7 需要单独判断。
李村同理。

现在我们已经能够知道张、李两村在某一天是否说谎了。

我们可以再写一个方法,这个方法用于获取前天是星期几

/** * 获取前天星期几 * @param day * @return */ private static int beforeYesterday (int day) { return day > 2 ? day - 2 : day + 5; }

方法已经基本搞定了,现在就差逻辑组装部分了

public static void main(String[] args) { boolean zhang, li, zhangBy, liBy; int by; // 循环一周 for (int i = 1; i < 8; i++) { // 获取前天星期几 by = beforeYesterday(i); // 张、李今天是否说谎 zhang = zhangIsLie(i); li = liIsLie(i); // 张、李前天是否说谎 zhangBy = zhangIsLie(by); liBy = liIsLie(by); System.out.println("=====今天星期" + i + " & 前天星期" + by +"====="); System.out.println("今天 -> 张:" + zhang + " 李:" + li); System.out.println("前天 -> 张:" + zhangBy + " 李:" + liBy); System.out.println("============================="); /* 如果张、李今天说谎,则张、李前天一定不说谎。 反之, 如果张、李今天不说谎,则张、李前天一定说谎。 */ if ((zhang && !zhangBy || !zhang && zhangBy) && (li && !liBy || !li && liBy)) { System.out.println("今天是星期" + i); } } }

代码运行结果

最后的答案是:星期一。

总结

代码也许还需做进一步的优化,思路清晰最重要,感谢!

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3201 引用 • 8216 回帖 • 2 关注
1 操作
anlingyi 在 2019-05-19 12:42:34 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • visus

    good

    1 回复
  • visus

    我在 leetCode 中也看到这样的题目

  • anlingyi via macOS
    作者

    请多多指点 ❤️

推荐标签 标签

  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    437 引用 • 1238 回帖 • 588 关注
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 120 关注
  • OnlyOffice
    4 引用 • 15 关注
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖 • 1 关注
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    172 引用 • 534 回帖
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    26093 引用 • 108337 回帖
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    35 引用 • 468 回帖 • 765 关注
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    201 引用 • 120 回帖
  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    36 引用 • 200 回帖 • 33 关注
  • 安全

    安全永远都不是一个小问题。

    199 引用 • 818 回帖
  • Access
    1 引用 • 3 回帖 • 1 关注
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖 • 1 关注
  • 程序员

    程序员是从事程序开发、程序维护的专业人员。

    589 引用 • 3528 回帖
  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 384 回帖 • 5 关注
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    188 引用 • 319 回帖 • 241 关注
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    117 引用 • 99 回帖 • 196 关注
  • OneDrive
    2 引用 • 4 关注
  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    77 引用 • 37 回帖 • 1 关注
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 631 关注
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    345 引用 • 754 回帖
  • sts
    2 引用 • 2 回帖 • 241 关注
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    20 引用 • 37 回帖 • 578 关注
  • 链滴

    链滴是一个记录生活的地方。

    记录生活,连接点滴

    180 引用 • 3879 回帖 • 2 关注
  • CodeMirror
    2 引用 • 17 回帖 • 168 关注
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖 • 1 关注
  • Google

    Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。

    49 引用 • 192 回帖 • 1 关注