java抽象-老师的生日-逻辑思维-有趣的面试题-遁地龙卷风

(-1)写在前面

都快去北京了,硬生生的安排一场java考试,对于那些特别细节的东西我忘了吧也不觉得有什么不好,以前都记得,也都见过,只不过平时不常用连接断了,但是你死记硬背是没用的,一段时间后还是会忘,唯一的途径就是多做东西,理论联系实际,相反这道题我感觉很有意思,也在网上看到了很多解释,觉得都有所不足,下面是我给出的答案。

(0)详细解释

设一个老师的生日为M月N日.把M告诉学生甲(即学生甲知道老师出生的月份),把N告诉学生乙(即学生乙知道老师出生的日).现有如下日期是公开的:3月4日,3月8日,3月10日,6月4日,6月7日,9月1日,9月10日,12月1日,12月2日,12月8日

其中有一个是老师的生日.

现有学生甲与学生乙的对话:

学生甲:如果我不知道的话,你一定不知道.

学生乙:本来我不知道的,现在我知道了.

学生甲:那我也知道了.

现在问:老师的生日是哪一天?

甲的第一句话

首先我们看数据有哪些特性,数据是由月份和日期组成的,甲是知道月份的,数据中的月份有3,6,9,12,甲不能通过自己知道的月份信息判断出老师的生日,甲知道乙无法通过日期推测出正确的月份。

甲知道的是3 月 日期有4,8,10

甲知道的是6月 日期有4,7

甲知道的是9 月 日期有1,10

甲知道的是12月  日期有2,8

我们发现7日、2日是唯一的,也就说明,如果甲知道的是六月,那么乙知道的是7日,就推测出生日,甲就不会说你一定不知道,所以甲知道的不是6月,同理,甲知道的也不是12月。

乙的第一句话

根据甲的第一句话,剩余数据如下:

甲知道的是3 月 日期有4,8,10

甲知道的是9 月 日期有1,10

乙的前半句话有歧义,第一种情况,乙认为甲能够通过月份推出生日,那么乙的日期就是2或7,这与甲第一句话得出的结论不符。那么就是第二种情况,乙此时通过甲的话推断出上述结论,根据自己的日期判断出了甲的月份,显然10是不对的,如果是10,甲的月份就不唯一。那么数据如下:

甲知道的是3 月 日期有4,8

甲知道的是9 月 日期有1

这样看来似乎3月4日,3月8日,9月1日都是可以的,因为乙知道1,4,8中的任意一个对应的月份都是唯一的

甲的第二句话

这句话把答案推向了9月1日,因为对于甲来讲,如果他知道的是3月,对于老师的生日就3月4日和3月8日两种选择,而如果他知道的是9月,就只有9月1日这一种答案。

时间: 2024-10-20 16:19:57

java抽象-老师的生日-逻辑思维-有趣的面试题-遁地龙卷风的相关文章

java编程的一个猜数字有趣小游戏

import javax.swing.Icon; import javax.swing.JOptionPane; public class ai { /** * @param args */ public static void main(String[] args) { Icon icon = null; boolean bl = false; int put = 0; int c = (int) (((Math.random())*100)+1); //获取一个1-100的随机数 Syste

张老师的生日

小明和小强都是张老师的学生,张老师的生日是M月N日,2人都知道张老师的生日 是下列10组中的一天,张老师把M值告诉了小明,把N值告诉了小强,张老师问他们知道他的生日是那一天吗? 3月4日 3月5日 3月8日 6月4日 6月7日 9月1日 9月5日 12月1日 12月2日 12月8日 小明说:如果我不知道的话,小强肯定也不知道 小强说:本来我也不知道,但是现在我知道了 小明说:哦,那我也知道了 请根据以上对话推断出张老师的生日是哪一天 分析:小明所说我不知道是可以理解的,因为每个月都有2和3种选择

请根据以上对话推断出张老师的生日是哪一天

小明和小强都是张老师的学生,张老师的生日是M月N日,2人都知道张老师的生日是下列10组中的一天,张老师把M值告诉了小明,把N值告诉了小强,张老师问他们知道他的生日是那一天吗? 3月4日 3月5日 3月8日 6月4日 6月7日 9月1日 9月5日 12月1日 12月2日 12月8日 小明说:如果我不知道的话,小强肯定也不知道小强说:本来我也不知道,但是现在我知道了小明说:哦,那我也知道了 请根据以上对话推断出张老师的生日是哪一天 解: 小明说:如果我不知道的话,小强肯定也不知道 --说明小明的是月

一些JAVA中有趣的面试题

这几天的JAVA培训课上,不断的唤醒自己对JAVA的理解(时间太长,大学学的快忘干净了),其中有一些很有趣的面试题,都是在抠JAVA细节(唉,我是那种见坑就往下跳的人,一做就错),下面就来分享一下: 1)用JAVA程序写出当你在超市购物花费1.1元时,你给收银员2元钱,收银员找你0.9元的过程: 当时一看题目,好简单啊!迅速写出: public class Sell{ public static void main(String[] args){ double total = 2.0; doub

java — 抽象abstract 和 最终 final

java - 抽象abstract 和 最终 final 修饰符 一.抽象类和抽象方法 抽象类:由于许多对象都有共同的属性和方法,产生了代码冗余,抽象类做的就是将这些类共同的方法和属性 抽取 出来,变成了一个类,那就是抽象类. 和 父类 很像对不对,其实抽象类就是父类中的一种,必须被继承才能完美使用的一种类. 1. 抽象类的声明 [访问修饰符] abstract class 类名 { //方法体 } 2. 抽象方法的声明 [访问修饰符] abstract 返回值类型 方法名 (形参类型 形参名,

黑马程序员----java基础---抽象类和接口,附相关面试题

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一:抽象类(掌握) (1)把多个共性的东西提取到一个类中,这是继承的做法. 但是呢,这多个共性的东西,在有些时候,方法声明一样,但是方法体. 也就是说,方法声明一样,但是每个具体的对象在具体实现的时候内容不一样. 所以,我们在定义这些共性的方法的时候,就不能给出具体的方法体. 而一个没有具体的方法体的方法是抽象的方法. 在一个类中如果有抽象方法,该类必须定义为抽象类. (2)抽象类的特点 A:

Java 抽象工厂模式

一.概述 1.抽象工厂:当情况是需要产生一系列产品,若需更换产品,则要求一系列产品一起换,且要控制一系列产品的产生过程,此时可考虑抽象工厂模式.例:小明装修屋子,把电视.冰箱都替换掉,他这次需要把电视.冰箱换成三星的,下次装修可能要换成海尔的.此时可设计抽象类Telveison及Fridge负责产生产品,抽象工厂AbstractFactory负责产生一系列产品 PS:抽象工厂与普通工厂各自的优缺点: (1)普通工厂容易在产品维度进行扩展,便产生系列产品时不方便,且易造成工厂类泛滥 (2)抽象工厂

java抽象数据类型

抽象数据类型抽象数据类型是描述数据结构的一种理论工具.在介绍抽象数据类型之前我们先介绍一下数据类型的基本概念.数据类型(data type)是一组性质相同的数据元素的集合以及加在这个集合上的一组操作.例如Java 语言中就有许多不同的数据类型,包括数值型的数据类型.字符串.布尔型等数据类型.以Java 中的int 型为例,int 型的数据元素的集合是[-2147483648,2147483647]间的整数,定义在其上的操作有加.减.乘.除四则运算,还有模运算等.定义数据类型的作用一个是隐藏计算机

Java抽象接口技巧(一)

原文链接 http://blog.csdn.net/qq_35101189/article/details/70799155 在程序设计过程中,读者很可能遇到这样一种困境:设计了一个接口,但实现这个接口的子类并不需要实现接口中的全部方法,也就是说,接口中的方法过多,对于某些子类是多余的,我们不得不浪费的写上一个空的实现. 今天小菜提到的"抽象接口",就是用来解决这个问题的. 为了不误导读者,先说明一下,什么是"抽象接口". 所谓"抽象接口",即在