奇怪的两姐妹

原题目:有一个人在一个森林里迷路了,他想看一下时间,可是又发现自己没带表。恰好他看到前面有两个小女孩在玩耍,于是他决定过去打听一下。更不幸的是这两个小女孩有一个毛病,姐姐上午说真话,下午就说假话,而妹妹与姐姐恰好相反。但他还是走近去他问她们:“你们谁是姐姐?”胖的说:“我是。”瘦的也说:“我是。”他又问:现在是什么时候?胖的说:“上午。”“不对”,瘦的说:“应该是下午。”这下他迷糊了,到底他们说的话是真是假? 

直接上代码吧:
<?php

/*************************************************************
有一个人在一个森林里迷路了,他想看一下时间,可是又发现自己没带表。
恰好他看到前面有两个小女孩在玩耍,于是他决定过去打听一下。
更不幸的是这两个小女孩有一个毛病,
姐姐上午说真话,下午就说假话,而妹妹与姐姐恰好相反。
但他还是走近去他问她们:“你们谁是姐姐?”胖的说:“我是。”瘦的也说:“我是。”
他又问:现在是什么时候?胖的说:“上午。”“不对”,瘦的说:“应该是下午。”
这下他迷糊了,到底他们说的话是真是假?
************************************************************/

/**
*	时间
*	am 上午
*	pm 下午
*/
$TIME = ['am', 'pm'];

/**
*	小女孩类型
*	fat 胖的
*	thin 瘦的
*/
$GIRL = ['fat' , 'thin'];

/**
*	小女孩身份对应的说话真假规则
*	姐姐上午说真话,下午就说假话,而妹妹与姐姐恰好相反。	
*/
$GIRL_TALK_RULE = ['older'=>['am'=>true, 'pm'=>false], 'younger'=>['am'=>false, 'pm'=>true]];

/**
* 两女孩说的话
*/
$ANSWER = ['fat'=>['girl'=>'older','time'=>'am'],'thin'=>['girl'=>'older','time'=>'pm']];


/**
*	判断谁说的是真的
*	根据 时间[am,pm] 分别判断女孩的身份
*/
function who_is_true()
{
	global $TIME, $GIRL, $ANSWER;
	$res = [];
	foreach ($TIME as $time) {
		foreach ($GIRL as $girl) {
			$check_res = check_girl_talk($time, $girl);
			// 根据$check_res确定女孩身份和时间
			if ($check_res && $ANSWER[$girl]['time'] == $time)
				$res = $ANSWER[$girl];
		}
	}
	return $res;
}

/**
*	$time = 'am' || 'pm'
*	$role = 'fat' || 'thin'
*	根据时间$time 判断女孩说的话是否与她的身份对应的说话规则相符
*/
function check_girl_talk($time, $role)
{
	global $ANSWER, $GIRL_TALK_RULE;
	// 女孩自己说的 身份
	$girl = $ANSWER[$role]['girl'];

	// 当前时间 是否是 女孩回答的时间
	$check_time = $time == $ANSWER[$role]['time'];

	// 当前时间 对应 女孩说话的 真假规则
	$answer_rule = $GIRL_TALK_RULE[$girl][$time];

	// 判断 女孩说的话 是否与 她说话的 真假规则相符
	return $check_time == $answer_rule ? true : false;
}

$res = who_is_true();


echo "<pre>";
print_r($res);


结果:
Array
(
    [girl] => older
    [time] => am
)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值