题目:
立即学习“PHP免费学习笔记(深入)”;
<code>经理有三个女儿,年龄相加为13。 三个女儿的年龄相乘为经理的年龄,经理的一个手下知道 经理的年龄,但是不知道其三个女儿的年龄。 经理告诉手下有一个女儿头发是黑色的,手下立即知道了三个女儿的年龄。 请问三个女儿的年龄分别是多少?为什么? </code>
计算:
<code class="php"><br>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;
}
</code>输出:
<code>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) **/ </code>
以上输出答案错误。如何解答本题?
题目:
立即学习“PHP免费学习笔记(深入)”;
<code>经理有三个女儿,年龄相加为13。 三个女儿的年龄相乘为经理的年龄,经理的一个手下知道 经理的年龄,但是不知道其三个女儿的年龄。 经理告诉手下有一个女儿头发是黑色的,手下立即知道了三个女儿的年龄。 请问三个女儿的年龄分别是多少?为什么? </code>
计算:
<code class="php"><br>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;
}
</code>输出:
<code>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) **/ </code>
以上输出答案错误。如何解答本题?
做这种题我向来不行, 但是 太明显了, 你漏了几个条件:
经理的一个手下知道 经理的年龄,但是不知道其三个女儿的年龄。经理告诉手下有一个女儿头发是黑色的,手下立即知道了三个女儿的年龄。 -> 说明 针对 经理的年龄(三女儿年龄乘积), 女儿的年龄有多种选择.
经理告诉手下有一个女儿头发是黑色的 -> 应该是 "经理告诉手下只有一个女儿头发是黑色的", 说明 其他两个是小小孩, 头发不黑? (逻辑对否? 网上看到的...)
<code class="php"><?php
// 用一个数组来保存可能性
$list = array();
// 列出所有可能性,年龄按从小到大试
for ($i = 1; $i < 13; $i++) {
$rest = 13 - $i;
for ($j = $i; $j <= $rest / 2; $j++) {
$k = $rest - $j;
$product = $i * $j * $k;
array_push($list, array($i, $j, $k, $product));
}
}
// 按经理年龄排序
usort($list, function($a, $b) {
return $a[3] - $b[3];
});
// 先看看所有可能性
foreach ($list as list($i, $j, $k, $p)) {
echo "$i, $j, $k = $p\n";
}
// 按年龄排除不可能的
$map = array();
foreach ($list as $t) {
if ($t[0] + $t[1] + $t[2] + 14 < $t[3]) {
$key = "$t[3]";
if (array_key_exists($key, $map)) {
array_push($map[$key], $t);
} else {
$map[$key] = array($t);
}
}
}
// 找出不唯一的(因为唯一就不需要黑头发条件)
$map = array_filter($map, function($v, $k) {
return count($v) > 1;
}, 1);
// 二维转一维
$list = array();
foreach ($map as $k => $v) {
$list = array_merge($list, $v);
}
// 找出年龄中只有一个大于2岁的(黑头发)
// 关于多少岁头发变黑,只有找度娘了
$list = array_filter($list, function($t) {
$temp = array_filter($t, function($v) {
return $v > 2;
});
return count($temp) == 2;
});
// 输出结果
if (count($list) == 1) {
echo "found " . json_encode($list[0]);
} else {
echo "not found";
}
?></code>所有输出(最后一行是结果)
<code class="markdown">1, 1, 11 = 11 1, 2, 10 = 20 1, 3, 9 = 27 1, 4, 8 = 32 1, 5, 7 = 35 2, 2, 9 = 36 1, 6, 6 = 36 2, 3, 8 = 48 2, 4, 7 = 56 2, 5, 6 = 60 3, 3, 7 = 63 3, 4, 6 = 72 3, 5, 5 = 75 4, 4, 5 = 80 found [2,2,9,36]</code>
我的二杆子 PHP 写得太恼火了,还是写 JS 顺手,哈哈!
python 代码
<code>#!/usr/bin/python
# -*- coding:utf-8 -*-
if __name__ == '__main__':
s1 = [tuple(sorted([x, y, z])) for x in range(1,13) for y in range(1, 13) for z in range(1, 13) if x + y + z == 13 and 50 > x * y * z > 18]
s2 = set(s1)
result = [i for i in s2 if 35 > i[0] * i[1] * i[2] - max(i) > 18]
print result</code>
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号