题目:
经理有三个女儿,年龄相加为13。
三个女儿的年龄相乘为经理的年龄,经理的一个手下知道 经理的年龄,但是不知道其三个女儿的年龄。
经理告诉手下有一个女儿头发是黑色的,手下立即知道了三个女儿的年龄。
请问三个女儿的年龄分别是多少?为什么?
计算:
function getAge($sum)
{
$ageLimit = 121; // 最大年龄121岁
$ageFrist = 18; //假设最小生育年龄 18岁
$posible = [];
for ($c1 = 1; $c1 <= $sum; $c1++) {
for ($c2 = 1; $c2 <= $sum; $c2++) {
for ($c3 = 1; $c3 <= $sum; $c3++) {
if ($c1 + $c2 + $c3 == $sum && $c1 * $c2 * $c3 < $ageLimit && $c1 * $c2 * $c3 - max($c1, $c2, $c3) >= $ageFrist) {
$arr = [$c1, $c2, $c3];
asort($arr);
$age = implode('-', $arr);
if (!in_array($age, $posible)) {
$posible[] = $age;
}
}
}
}
}
return $posible;
}
输出:
var_dump(getAge(13));
/**
array (size=12)
0 => string '1-3-9' (length=5)
1 => string '1-4-8' (length=5)
2 => string '1-5-7' (length=5)
3 => string '1-6-6' (length=5)
4 => string '2-2-9' (length=5)
5 => string '2-3-8' (length=5)
6 => string '2-4-7' (length=5)
7 => string '2-5-6' (length=5)
8 => string '3-3-7' (length=5)
9 => string '3-4-6' (length=5)
10 => string '3-5-5' (length=5)
11 => string '4-4-5' (length=5)
**/
以上输出答案错误。如何解答本题?
做这种题我向来不行, 但是 太明显了, 你漏了几个条件:
经理的一个手下知道 经理的年龄,但是不知道其三个女儿的年龄。经理告诉手下有一个女儿头发是黑色的,手下立即知道了三个女儿的年龄。 -> 说明 针对 经理的年龄(三女儿年龄乘积), 女儿的年龄有多种选择.
经理告诉手下有一个女儿头发是黑色的 -> 应该是 "经理告诉手下只有一个女儿头发是黑色的", 说明 其他两个是小小孩, 头发不黑? (逻辑对否? 网上看到的...)