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

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

小明和小强都是张老师的学生,张老师的生日是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组中的一天,张老师把M值告诉了小明, 把N值 ...

  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. ECCV 2018 《Triplet Loss in Siamese Network for Object Tracking》论文笔记
  2. 1.2 Hive的优缺点
  3. 数据结构与算法 | 二叉树四种的遍历方法(递归与非递归)
  4. HALCON 1D Measure 算子初识
  5. nodejs项目如何部署到服务器上?
  6. SQL Server中的查询优化技术:基础
  7. Github查看文件历史提交和修改记录
  8. 启动mongodb服务时报错100
  9. TransactNamedPipe函数
  10. 全新激光雕刻机切割机打标机写字机三轴步进电机运动控制板 控制板硬件软件全部是自己开发的
  11. Chrome去广告插件-Adblock Plus
  12. 两台计算机共享鼠标,总算发现什么是双模键盘(两台电脑共用一套鼠标键盘)
  13. .net NPOI读写Doc文件
  14. 6.后台验证码-session作用域
  15. 判断一个整数是否是7的倍数
  16. 计算机图片怎么截图快捷键,电脑截图快捷键四种截屏方式,笔记本电脑如何截屏截图?...
  17. 宽带连接时用电脑开热点的方法
  18. Python机器学习:逻辑回归008OvR与OvO
  19. 企业微信hook接口,协议开发,群操作功能教程
  20. 萝卜魂军曹机器人_《萝卜魂》参战作品详介第一弹:《交响诗篇》

热门文章

  1. 5个拿来就能用的整人代码脚本
  2. 【LeetCode数据库】第二高的薪水(176)
  3. 一位数据分析师的职业规划
  4. 用假名印名片犯法吗_用简单的javascript学习假名
  5. 家庭IOT监测之摄像头OV7670测试
  6. 帆软报表设置单元格填报以及根据值的大小进行排名方法
  7. 二八原理:软件开发中的二八原理
  8. 使用 Redis 统计网站 UV 的方法
  9. Extjs学习 数据模型Molde
  10. compose 编程思想