好久没上网了发贴了,看到有人发这道题,就用工作流的解决方式作一下吧

小明和小强都是张老师的学生,张老师的生日是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日

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

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;
        }

    }



工作流:小明和小强都是张老师的学生......相关推荐

  1. 工作流:小明和小强都是张老师的学生

    工作流:小明和小强都是张老师的学生 好久没上网了发贴了,看到有人发这道题,就用工作流的解决方式作一下吧 小明和小强都是张老师的学生,张老师的生日是M月N日, 2人都知道张老师的生日是 下列10组中的一 ...

  2. [转]工作流:小明和小强都是张老师的学生

     工作流:小明和小强都是张老师的学生 好久没上网了发贴了,看到有人发这道题,就用工作流的解决方式作一下吧 小明和小强都是张老师的学生,张老师的生日是M月N日, 2人都知道张老师的生日是 下列10组中的 ...

  3. 微软的一道经典逻辑推理题:小明和小强都是张老师的学生,张老师的生日是M月N日

    微软的一道经典逻辑推理题:小明和小强都是张老师的学生,张老师的生日是M月N日 分类: 天下杂侃 2008-08-07 23:37 17495人阅读 评论(21) 收藏 举报 题目是这样的: 小明和小强 ...

  4. 小明和小强都是张老师的学生,张老师的生日是M月N日问题

    小明和小强都是张老师的学生,张老师的生日是M月N日,2人都不知道张老师的生日是下列10组中的一天,张老师把M值告诉了小明,把N值告诉了小强,张老师问他们知道他的生日是那一天吗? 3月4日 3月5日 3 ...

  5. 小明和小强都是张老师的学生,张老师的生日是M月N日,

    小明和小强都是张老师的学生,张老师的生日是M月N日,   2人都知道张老师的生日是下列10组中的一天,张老师把M值告诉了小明,   把N值告诉了小强,张老师问他们知道他的生日是那一天吗?   3月4日 ...

  6. 小明小强c语言20,C语言求解-小明和小强都是张老师的学生,张老师的生日是M月N日.doc...

    小明和小强都是张老师的学生,张老师的生日是M月N日, 2人都知道张老师的生日是下列10组中的一天,张老师把M值告诉了小明, 把N值告诉了小强,张老师问他们知道他的生日是那一天吗? 3月4日 3月5日 ...

  7. 小明和小强都是张老师的学生

    小明和小强都是张老师的学生,张老师的生日是M月N日,2人都知道张老师的生日是下列10组中的一天, 张老师把M值告诉了小明,把N值告诉了小强, 张老师问他们知道他的生日是哪一天吗?  3月4日 3月5日 ...

  8. 小明和小强都是张老师的学生,张老…

    小明和小强都是张老师的学生,张老师的生日是M月N日, 2人都知道张老师的生日是下列10组中的一天, 张老师把M值告诉了小明,把N值告诉了小强, 张老师问他们知道他的生日是那一天吗? 3月4日 3月5日 ...

  9. 老师生日c语言,C语言求解-小明和小强都是张老师的学生张老师的生日是M月N日.doc...

    C语言求解-小明和小强都是张老师的学生张老师的生日是M月N日 小明和小强都是张老师的学生,张老师的生日是M月N日, 2人都知道张老师的生日是下列10组中的一天,张老师把M值告诉了小明, 把N值告诉了小 ...

最新文章

  1. 从业务在线到互联互通,钉钉宜搭进入低代码3.0阶段新模式
  2. 配置Redis主从复制
  3. (68)Verilog HDL系统函数和任务:$random
  4. 设计师必备的资源网站和灵感作品社区分享!
  5. sql server死锁_SQL Server如何选择死锁受害者
  6. 为什么都建议学java而不是python-是不是Python比Java更容易学,更容易就业?
  7. iwebshop关于按钮点击提示的系列代码操作流程
  8. oracle中-1002,安装Oracle RAC时, 碰到到了PRKC-1002错误
  9. 【51单片机】利用烧录软件生成延时函数 入门学习
  10. PMP_模考三 (3A通过分享)(180题附答案及解析)
  11. 人人网登陆(selenium、PtantomJS结合)
  12. Cesium 地形图
  13. 搭建 PHP 开发环境(手把手图文教程)
  14. 炫酷恶趣强大的制作神器小程序源码_支持多种流量主模式
  15. 习题3.3投骰子的随机游戏
  16. 哪些行业适合开发小程序商城
  17. warmup学习率训练
  18. 字符串的Unicode
  19. 15年用canvas画的
  20. 2020icpc上海(重温经典)

热门文章

  1. php 忽略小数点,php使用floor去掉小数点的例子
  2. [ECCV2020]Self-Supervised Monocular 3D Face Reconstruction by Occlusion-Aware Multi-view Geometry
  3. python将Excel数据自动生成Word报告【Pyhon-docx\openpyxl】
  4. [022] Matlab生物科学图像处理--细胞划痕实验(Wound healing)的图片处理和划痕面积计算
  5. 用python输出世界你好汉_python print 格式输出跟老齐学Python之有容乃大的list(4)
  6. 【前端 - CSS】第 18 课 - 背景属性
  7. https协议使用百度地图api
  8. javaee java_JavaEE:JavaEE技术组成
  9. 狭义的servlet和广义的servlet
  10. altium 原理图更新UNIQUE ID一样怎么办