[转]工作流:小明和小强都是张老师的学生
好久没上网了发贴了,看到有人发这道题,就用工作流的解决方式作一下吧
小明和小强都是张老师的学生,张老师的生日是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;
}
}
[转]工作流:小明和小强都是张老师的学生相关推荐
- 工作流:小明和小强都是张老师的学生
工作流:小明和小强都是张老师的学生 好久没上网了发贴了,看到有人发这道题,就用工作流的解决方式作一下吧 小明和小强都是张老师的学生,张老师的生日是M月N日, 2人都知道张老师的生日是 下列10组中的一 ...
- 工作流:小明和小强都是张老师的学生......
好久没上网了发贴了,看到有人发这道题,就用工作流的解决方式作一下吧 小明和小强都是张老师的学生,张老师的生日是M月N日, 2人都知道张老师的生日是 下列10组中的一天,张老师把M值告诉了小明, 把N值 ...
- 微软的一道经典逻辑推理题:小明和小强都是张老师的学生,张老师的生日是M月N日
微软的一道经典逻辑推理题:小明和小强都是张老师的学生,张老师的生日是M月N日 分类: 天下杂侃 2008-08-07 23:37 17495人阅读 评论(21) 收藏 举报 题目是这样的: 小明和小强 ...
- 小明和小强都是张老师的学生,张老师的生日是M月N日问题
小明和小强都是张老师的学生,张老师的生日是M月N日,2人都不知道张老师的生日是下列10组中的一天,张老师把M值告诉了小明,把N值告诉了小强,张老师问他们知道他的生日是那一天吗? 3月4日 3月5日 3 ...
- 小明和小强都是张老师的学生,张老师的生日是M月N日,
小明和小强都是张老师的学生,张老师的生日是M月N日, 2人都知道张老师的生日是下列10组中的一天,张老师把M值告诉了小明, 把N值告诉了小强,张老师问他们知道他的生日是那一天吗? 3月4日 ...
- 小明小强c语言20,C语言求解-小明和小强都是张老师的学生,张老师的生日是M月N日.doc...
小明和小强都是张老师的学生,张老师的生日是M月N日, 2人都知道张老师的生日是下列10组中的一天,张老师把M值告诉了小明, 把N值告诉了小强,张老师问他们知道他的生日是那一天吗? 3月4日 3月5日 ...
- 小明和小强都是张老师的学生
小明和小强都是张老师的学生,张老师的生日是M月N日,2人都知道张老师的生日是下列10组中的一天, 张老师把M值告诉了小明,把N值告诉了小强, 张老师问他们知道他的生日是哪一天吗? 3月4日 3月5日 ...
- 小明和小强都是张老师的学生,张老…
小明和小强都是张老师的学生,张老师的生日是M月N日, 2人都知道张老师的生日是下列10组中的一天, 张老师把M值告诉了小明,把N值告诉了小强, 张老师问他们知道他的生日是那一天吗? 3月4日 3月5日 ...
- 老师生日c语言,C语言求解-小明和小强都是张老师的学生张老师的生日是M月N日.doc...
C语言求解-小明和小强都是张老师的学生张老师的生日是M月N日 小明和小强都是张老师的学生,张老师的生日是M月N日, 2人都知道张老师的生日是下列10组中的一天,张老师把M值告诉了小明, 把N值告诉了小 ...
最新文章
- ECCV 2018 《Triplet Loss in Siamese Network for Object Tracking》论文笔记
- 1.2 Hive的优缺点
- 数据结构与算法 | 二叉树四种的遍历方法(递归与非递归)
- HALCON 1D Measure 算子初识
- nodejs项目如何部署到服务器上?
- SQL Server中的查询优化技术:基础
- Github查看文件历史提交和修改记录
- 启动mongodb服务时报错100
- TransactNamedPipe函数
- 全新激光雕刻机切割机打标机写字机三轴步进电机运动控制板 控制板硬件软件全部是自己开发的
- Chrome去广告插件-Adblock Plus
- 两台计算机共享鼠标,总算发现什么是双模键盘(两台电脑共用一套鼠标键盘)
- .net NPOI读写Doc文件
- 6.后台验证码-session作用域
- 判断一个整数是否是7的倍数
- 计算机图片怎么截图快捷键,电脑截图快捷键四种截屏方式,笔记本电脑如何截屏截图?...
- 宽带连接时用电脑开热点的方法
- Python机器学习:逻辑回归008OvR与OvO
- 企业微信hook接口,协议开发,群操作功能教程
- 萝卜魂军曹机器人_《萝卜魂》参战作品详介第一弹:《交响诗篇》