小明和小强都是张老师的学生,张老师的生日是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、利用如下数据结构:
enum mn{a=1,b=2,c=3,d=4,e=5,f=6,g=7,h=8,i=9,j=12}m,n;
int mon[4]={3,6,9,12};
int day[6]={1,2,4,5,7,8};
2、利用上面的数据结构,配合如下注释,填充完整函数,得出答案。
void getValueFromMing(){}/*如果我不知道,小强肯定也不知道.*/
void getValueFromQiang(){}/*本来我不知道,现在我知道了.*/
void getValueFromMing2(){}/*那我也知道了.*/
/*
临时写了个code,有空了再做改进。
我们从这样的角度去考虑,
因为我知道的不是...
“比如小明,因为我知道的月分不是...,所以小强一定不知道”
这样通过排除法,把范围就给缩小到很小很小,最后知道答案了
*/
/*
解答过程:
小明知道月份,小强知道日子
小明说:如果我不知道的话,小强肯定也不知道
那么小明知道小强不可以单凭日期就能判断,所以小强知道的日子是没有重复的
而6.7和12.2的日子是没有重复的,所以可以排除6月和12月
3月4日 3月5日 3月8日
6月4日 6月7日
9月1日 9月5日
12月1日 12月2日 12月8日
小强说:本来我也不知道,但是现在我知道
小强听到小明说的,就知道排除了6月和12月
他之所以那么肯定,因为他知道的日子是没有重复的
3月4日 3月5日 3月8日
9月1日 9月5日
所以3.5和9.5不对,排除
小明说:哦,那我也知道了
因为小明知道月份,他这么肯定,是因为剩下的日期只有一个是月份没有重复的,就是9月份
3月4日 3月8日
9月1日
所以答案是9.1
*/
/*==============================================================================
文 件 名 : testbirthday.c
功 能 : 小明和小强通过对方的语言得出张老师的生日
作 者 : jernymy
日 期 : 2010/01/14
备 注 : 通过排除法: 因为我知道的不是...
“比如小明,因为我知道的月分不是...,所以小强一定不知道”
基于VC6.0的环境。
==============================================================================*/
#include "stdio.h"
// 1、利用如下数据结构:
enum mn
{
a=1,b=2,c=3,d=4,e=5,f=6,g=7,h=8,i=9,j=12
}m,n;
int mon[4] = {3, 6, 9, 12};
int day[6] = {1, 2, 4, 5, 7, 8};
// 2、利用上面的数据结构,配合如下注释,填充完整函数,得出答案。
typedef enum
{
KNOW_ERROR = 0,
MING_HAVE_KNOW,
MING_MAYBE_KNOW,
MING_DONOT_KNOW,
MING_REMOVE_DATA,
QIANG_HAVE_KNOW,
QIANG_MAYBE_K