号称微软面试题目,喷了
- springer小明和小强都是张老师的学生,张老师的生日是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日
小明说:如果我不知道的话,小强肯定也不知道
小强说:本来我也不知道,但是现在我知道了
小明说:哦,那我也知道了
请根据以上对话推断出张老师的生日是哪一天?
谁来"做一做" - dragonfly是12月8日么?
- springer不是.
另外我估计本帖的其他回复里不大可能会出现正确答案...:D - zsmin晕 这题目错了
M月N日
把M值告诉了小明,把N值告诉了小强 如果这样下面的对话不成立
小明说:如果我不知道的话,小强肯定也不知道
小强说:本来我也不知道,但是现在我知道了
小明说:哦,那我也知道了
[本帖最后由 zsmin 于 2008-11-5 17:30 编辑] - springer
看来我是小瞧tg众了
- heven2004百度知道
[本帖最后由 heven2004 于 2008-11-5 17:40 编辑] - hourousha9月1
- woohyuk9月1号
- 萝卜题不对,第一句完了以后,第二句不成立
- 白金の星我百度了
- springer你对一半错一半:D
- bylaaa我草 我看了答案之后 唯一的感觉是小强和小明都是非人类
蟑螂科? - Tales.J“2人都不知道”
- psji我以为是6月7日,求正确答案
- gpscdma9月1日
过程有点麻烦,不写了 - lewx7日和2日都是唯一解,小强本来不知道说明N≠7&2
- GUNMARZ9.1
3句话排除3次
[本帖最后由 GUNMARZ 于 2008-11-5 18:13 编辑] - 哇哈哈
- 魔女猎人罗宾这种题目都不会做啊~智商
我来一个:
现在有一座大楼有100层,你手里有2个一模一样的球,从某一层楼丢下来的话,球刚好碎掉。
问:你最少要试多少次,才能保证一定找到这个“让球刚好碎掉”的楼层?
注意:球只有2个,如果你从某一层楼丢下来沒碎,那么这个球还可以再试着丢,碎了就不能再丢了。 - reinhaidvon12次吧,大概算了下
- bluecoffee6月4日
- shramm其实你们都错了,答案是3月8日:D
请LZ说出题目错的原因. - shramm9月1日和6月4日都属于用第二句来排除的吧,性质是一样的.
- 魔女猎人罗宾过程:D
- qdbcn“让球刚好碎掉”
就是下一层不会碎,上一层会稀巴烂,一共两个球,所以最少从第三层开始丢,3.6.9.12……的顺序
在n层碎鸟第二个就在n-1丢,碎了就是这层,不碎就在n-2
剩下就是数学题鸟,自己算 - qdbcn我要奖励
- Hiro14次
- Hiro有可能n, n-1, n-2都会碎
- shramm24次
[本帖最后由 shramm 于 2008-11-5 21:34 编辑] - zhaolinjia我内纽曼面
- Hiro比如说你现在只有一个球
你从第一层扔起,没碎就往上一层再扔
哪一层碎了,就能确定正好是这一层碎的
那么最坏的情况下,你扔100次就能保证找到正确的楼层(第100层) - 自由无限这样明显不科学,假如说一个新球在5L会坏,但你这样从2L试上来的话,肯定到不了5L就坏了,因为每一次摔都对球有破坏,只是没表现出来而已
- maarek_fs艹. 麻痹还带累积伤害值的. 疯~~
- SORAYA楼主知道你的题目错在哪里吗?一字只差谬以千里啊
- shixn如果去面试看到这种题目,立刻走人
- 魔女猎人罗宾错得一塌糊涂
- 魔女猎人罗宾奖励的话,只有加激骚度了
[本帖最后由 魔女猎人罗宾 于 2008-11-6 09:57 编辑] - 魔女猎人罗宾加激骚度了
TG果然藏龙卧虎啊 - 风吹奶罩飞答案应该是9月1日。
1)首先分析这10组日期,经观察不难发现,只有6月7日和12月2日这两组日期的
日数是唯一的。由此可知,如果小强得知的N是7或者2,那么他必定知道了老师的
生日。
2)再分析“小明说:如果我不知道的话,小强肯定也不知道”,而该10组日期的
月数分别为3,6,9,12,而且都相应月的日期都有两组以上,所以小明得知M后
是不可能知道老师生日的。
3)进一步分析“小明说:如果我不知道的话,小强肯定也不知道”,结合第2步
结论,可知小强得知N后也绝不可能知道。
4)结合第3和第1步,可以推断:所有6月和12月的日期都不是老师的生日,因为
如果小明得知的M是6,而若小强的N==7,则小强就知道了老师的生日。(由第
1步已经推出),同理,如果小明的M==12,若小强的N==2,则小强同样可以知道老师的生日。即:M不等于6和9。现在只剩下“3月4日 3月5日 3月8日 9月1日
9月5日”五组日期。而小强知道了,所以N不等于5(有3月5日和9月5日),此时,
小强的N∈(1,4,8)注:此时N虽然有三种可能,但对于小强只要知道其中的
一种,就得出结论。所以有“小强说:本来我也不知道,但是现在我知道了”,
对于我们则还需要继续推理
至此,剩下的可能是“3月4日 3月8日 9月1日”
5)分析“小明说:哦,那我也知道了”,说明M==9,N==1,(N==5已经被排除,3月份的有两组) - leyoung3楼真优越
- springer大哥这不是我的题目,我发这贴就是为了嘲笑这题目的
- gpscdma这题其实出的还行
- springer小明的陈述无意义,逻辑上不成立,
小强的推理不正确,逻辑上不可能.
所以题目错.
正确答案是除了12月2日和6月7日以外的哪天都有可能.当然,前提是小强不是猪.:D - springer优越的是19楼,不是3楼:D
- 利露1.小明说:如果我不知道的话,小强肯定也不知道
小明能肯定小强不知道,那就说明小强拿到的肯定不是7和2(因为7和2直接可以确定是6月7日和12月2日);
小明能肯定小强拿到的不是7和2,那么他自己拿到的肯定不是6和12
(以上推算我假设小强有与我一样的智商,将所有的6月与12月排除)
3月4日 3月5日 3月8日
9月1日 9月5日
2.小强说:本来我也不知道,但是现在我知道了
当小强知道了小明拿到的是3或者9,他马上就知道了准确日期,所以小强拿到的不可能是5,只能是1,4,8中的一个
(以上推算我假设小明有与我一样的智商,范围变为)
3月4日 3月8日
9月1日
3.小明说:哦,那我也知道了
小明知道了,我的代码也算出来了
(如果有维一的月份,则小明能确定)
维一的月份是9
class begin
{
static void Main()
{
//初始化生日集合
生日集合 srjh=new 生日集合();
srjh.Add(new 生日类(3,4));
srjh.Add(new 生日类(3,5));
srjh.Add(new 生日类(3,8));
srjh.Add(new 生日类(6,4));
srjh.Add(new 生日类(6,7));
srjh.Add(new 生日类(9,1));
srjh.Add(new 生日类(9,5));
srjh.Add(new 生日类(12,1));
srjh.Add(new 生日类(12,2));
srjh.Add(new 生日类(12,8));
//开始工作流
工作流.BEG(srjh);
System.Console.Read();
}
}
//工作流
class 工作流
{
/**//* 开始结点
* ↓
* 结点A:如果我不知道的话 →结点X:小明知道(该节点分支略)
* ↓
* 结点B:小强肯定也不知道
* ↓
* 结点C: 小强说:现在我知道了
* ↓
* 结点D:小明说:哦,那我也知道了
* ↓
* 结束结点
*
*/
public static void BEG(生日集合 obj)
{
if(obj !=null)
{
A(obj);//下一结点
}
}
//结点A:如果我不知道的话
private static void A(生日集合 obj)
{
生日集合 jh=AI.小明分析(obj);
if(jh.Count==0)
{
B(obj); //下一结点
}
else
{
//小明可以光凭月知道的集合
//该节点分支略
}
}
//结点B:小强肯定也不知道
private static void B(生日集合 obj)
{
//得到小强光凭日期就能知道的集合
生日集合 小强知道的集合=AI.小强分析(obj);
//小明之所以知道小强肯定不知道,
//是因为小明知道的月份不是小强光凭日期就能知道的
生日集合 排除的集合=new 生日集合();
foreach(生日类 temp in 小强知道的集合)
{
foreach(生日类 tp in obj)
{
if(temp.月==tp.月)
{
排除的集合.Add(tp);
}
}
}
集合操作.排除(obj,排除的集合);
C(obj);//下一结点
}
//结点C: 小强说:现在我知道了
private static void C(生日集合 obj)
{
生日集合 小强知道的集合=AI.小强分析(obj);
D(小强知道的集合); //下一结点
}
//结点D:小明说:哦,那我也知道了
private static void D(生日集合 obj)
{
生日集合 小明知道的集合=AI.小明分析(obj);
END(小明知道的集合);//下一结点
}
//完成结点:
private static void END(生日集合 obj)
{
//完成,输出到屏幕
foreach(生日类 temp in obj)
{
System.Console.WriteLine(temp.月.ToString() +"-" +temp.日.ToString());
}
}
}
//功能扶助类
class 集合操作
{
public static void 排除(生日集合 s,生日集合 v)
{
foreach(生日类 temp in v)
{
s.Remove(temp);
}
}
}
class 生日类
{
public int 日=0;
public int 月=0;
public 生日类(int y,int r)
{
日=r;
月=y;
}
}
class 生日集合:System.Collections.ArrayList
{
public void 添加(生日类 v)
{
this.Add(v);
}
public void 移除(生日类 v)
{
this.Remove(v);
}
}
class AI
{
public static 生日集合 小明分析(生日集合 v)
{
//AI,如果有维一的月份,则小明能确定
//月份为1到12
生日集合 jh=new 生日集合();
int n=0;//记数器,如果n=1表示有
for(int i=1;i<=12;i++)
{
生日类 x=null;
foreach(生日类 temp in v)
{
if(temp.月==i)
{
n=n+1;
x=temp;
}
}
if(n==1)
{
jh.Add(x);
}
n=0;
}
return jh;
}
public static 生日集合 小强分析(生日集合 v)
{
//AI,如果有维一的日,则小强能确定
//日为1到31
生日集合 jh=new 生日集合();
int n=0;//记数器,如果n=1表示有
for(int i=1;i<=31;i++)
{
生日类 x=null;
foreach(生日类 temp in v)
{
if(temp.日==i)
{
n=n+1;
x=temp;
}
}
if(n==1)
{
jh.Add(x);
}
n=0;
}
return jh;
}
} - springer
题目如果不是错的的话,那你的推理就是正确的,可惜题目一开始就错了 - zsmin逻辑有问题,首先看第1句:小明说:如果我不知道的话,小强肯定也不知道
这句话一说即表明了两个意思,首先小强拿到的N不是2和7,不然他就直接回答张老师了,这一点小明也知道,但是他仍然不知道张老师生日,所以M不等于6,因为6月只有6月4日和6月7日,但6月7日是不可能的,如果他拿到6,他就可以唯一确定6月4日了,但M不等于12是怎么推出的???
排除6月和12月2日
3月4日 3月5日 3月8日
9月1日 9月5日
12月1日 12月8日
再看第2句:小强说:本来我也不知道,但是现在我知道了
排除双月同日的
3月4日
第3句:小明说:哦,那我也知道了
这句话没必要说了
原来这道题出了三句话是要进行三次排除的。。。。
[本帖最后由 zsmin 于 2008-11-6 17:13 编辑] - sleepd第一句话逻辑就不成立,即使小明不知道,小强还是有可能知道的。
- 幸村精市我又不知道他们说的真话假话,并且也没有提示说他们两个最后猜中了生日
那我凭什么通过他们的大白话来推断生日?