題目:
經理有三個女兒,年齡相加為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 = 111, 2, 10 = 201, 3, 9 = 271, 4, 8 = 321, 5, 7 = 352, 2, 9 = 361, 6, 6 = 362, 3, 8 = 482, 4, 7 = 562, 5, 6 = 603, 3, 7 = 633, 4, 6 = 723, 5, 5 = 754, 4, 5 = 80found [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