php 年龄算法,面试题 - PHP算法逻辑:如何计算年龄?

题目:

经理有三个女儿,年龄相加为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)

**/

以上输出答案错误。如何解答本题?

回复内容:

题目:

经理有三个女儿,年龄相加为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)

**/

以上输出答案错误。如何解答本题?

做这种题我向来不行, 但是 太明显了, 你漏了几个条件:

经理的一个手下知道 经理的年龄,但是不知道其三个女儿的年龄。经理告诉手下有一个女儿头发是黑色的,手下立即知道了三个女儿的年龄。

-> 说明 针对 经理的年龄(三女儿年龄乘积), 女儿的年龄有多种选择.

经理告诉手下有一个女儿头发是黑色的

-> 应该是 "经理告诉手下只有一个女儿头发是黑色的", 说明 其他两个是小小孩, 头发不黑? (逻辑对否? 网上看到的...)

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";

}

?>

所有输出(最后一行是结果)

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]

我的二杆子 PHP 写得太恼火了,还是写 JS 顺手,哈哈!

python 代码

#!/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

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值