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

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

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

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




转载于:https://www.cnblogs.com/wenanry/archive/2007/04/17/716245.html

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值