号称微软面试题目,喷了

  • s
    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日
    小明说:如果我不知道的话,小强肯定也不知道
    小强说:本来我也不知道,但是现在我知道了
    小明说:哦,那我也知道了
    请根据以上对话推断出张老师的生日是哪一天?


    谁来"做一做"
  • d
    dragonfly
    是12月8日么?
  • s
    springer
    不是.


    另外我估计本帖的其他回复里不大可能会出现正确答案...:D
  • z
    zsmin
    晕 这题目错了

    M月N日
    把M值告诉了小明,把N值告诉了小强 如果这样下面的对话不成立

    小明说:如果我不知道的话,小强肯定也不知道
    小强说:本来我也不知道,但是现在我知道了
    小明说:哦,那我也知道了

    [本帖最后由 zsmin 于 2008-11-5 17:30 编辑]
  • s
    springer
    看来我是小瞧tg众了
  • h
    heven2004
    百度知道

    [本帖最后由 heven2004 于 2008-11-5 17:40 编辑]
  • h
    hourousha
    9月1
  • w
    woohyuk
    9月1号
  • 萝卜
    题不对,第一句完了以后,第二句不成立
  • 白金の星
    我百度了
  • s
    springer
    你对一半错一半:D
  • b
    bylaaa
    我草 我看了答案之后 唯一的感觉是小强和小明都是非人类
    蟑螂科?
  • T
    Tales.J
    “2人都不知道”
  • p
    psji
    我以为是6月7日,求正确答案
  • g
    gpscdma
    9月1日
    过程有点麻烦,不写了
  • l
    lewx
    7日和2日都是唯一解,小强本来不知道说明N≠7&2
  • G
    GUNMARZ
    9.1
    3句话排除3次

    [本帖最后由 GUNMARZ 于 2008-11-5 18:13 编辑]
  • 哇哈哈
  • 魔女猎人罗宾
    这种题目都不会做啊~智商

    我来一个:
    现在有一座大楼有100层,你手里有2个一模一样的球,从某一层楼丢下来的话,球刚好碎掉。
    问:你最少要试多少次,才能保证一定找到这个“让球刚好碎掉”的楼层?
    注意:球只有2个,如果你从某一层楼丢下来沒碎,那么这个球还可以再试着丢,碎了就不能再丢了。
  • r
    reinhaidvon
    12次吧,大概算了下
  • b
    bluecoffee
    6月4日
  • s
    shramm
    其实你们都错了,答案是3月8日:D
    请LZ说出题目错的原因.
  • s
    shramm
    9月1日和6月4日都属于用第二句来排除的吧,性质是一样的.
  • 魔女猎人罗宾
    过程:D
  • q
    qdbcn
    “让球刚好碎掉”

    就是下一层不会碎,上一层会稀巴烂,一共两个球,所以最少从第三层开始丢,3.6.9.12……的顺序

    在n层碎鸟第二个就在n-1丢,碎了就是这层,不碎就在n-2

    剩下就是数学题鸟,自己算
  • q
    qdbcn
    我要奖励
  • H
    Hiro
    14次
  • H
    Hiro
    有可能n, n-1, n-2都会碎
  • s
    shramm
    24次

    [本帖最后由 shramm 于 2008-11-5 21:34 编辑]
  • z
    zhaolinjia
    我内纽曼面
  • H
    Hiro
    比如说你现在只有一个球
    你从第一层扔起,没碎就往上一层再扔
    哪一层碎了,就能确定正好是这一层碎的
    那么最坏的情况下,你扔100次就能保证找到正确的楼层(第100层)
  • 自由无限
    这样明显不科学,假如说一个新球在5L会坏,但你这样从2L试上来的话,肯定到不了5L就坏了,因为每一次摔都对球有破坏,只是没表现出来而已
  • m
    maarek_fs
    艹. 麻痹还带累积伤害值的. 疯~~
  • S
    SORAYA
    楼主知道你的题目错在哪里吗?一字只差谬以千里啊
  • s
    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月份的有两组)
  • l
    leyoung
    3楼真优越
  • s
    springer
    大哥这不是我的题目,我发这贴就是为了嘲笑这题目的
  • g
    gpscdma
    这题其实出的还行
  • s
    springer
    小明的陈述无意义,逻辑上不成立,
    小强的推理不正确,逻辑上不可能.

    所以题目错.

    正确答案是除了12月2日和6月7日以外的哪天都有可能.当然,前提是小强不是猪.:D
  • s
    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;
    }
    }
  • s
    springer


    题目如果不是错的的话,那你的推理就是正确的,可惜题目一开始就错了
  • z
    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 编辑]
  • s
    sleepd
    第一句话逻辑就不成立,即使小明不知道,小强还是有可能知道的。
  • 幸村精市
    我又不知道他们说的真话假话,并且也没有提示说他们两个最后猜中了生日

    那我凭什么通过他们的大白话来推断生日?