面試題 - PHP演算法邏輯:如何計算年齡?

來源:互聯網
上載者:User
題目:

經理有三個女兒,年齡相加為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. 經理的一個手下知道 經理的年齡,但是不知道其三個女兒的年齡。經理告訴手下有一個女兒頭髮是黑色的,手下立即知道了三個女兒的年齡。-> 說明 針對 經理的年齡(三女兒年齡乘積), 女兒的年齡有多種選擇.

  2. 經理告訴手下有一個女兒頭髮是黑色的 -> 應該是 "經理告訴手下只有一個女兒頭髮是黑色的", 說明 其他兩個是小小孩, 頭髮不黑? (邏輯對否? 網上看到的...)

 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
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.