學習軌道
/
PHP
PHP
/
練習
/
披薩圓周率
披薩圓周率

披薩圓周率

學習練習

簡介

整數

整數是屬於集合{..., -2, -1, 0, 1, 2, ...}的完整數字。整數的最大值和最小值取決於 PHP 所執行的系統。在大多數現代系統上,整數通常是 64 位元的值,也就是說它可以表示-9_223_372_036_854_775_808到9_223_372_036_854_775_807(含頭尾)。

<?php

$a = 1234;
$a = 1_234_567;

你可以使用進位前綴,以 10 進位以外的進位來書寫整數字面值:

<?php

$a = 0123; // octal number (equivalent to 83 decimal)
$a = 0o123; // octal number (as of PHP 8.1.0)
$a = 0x1A; // hexadecimal number (equivalent to 26 decimal)
$a = 0b11111111; // binary number (equivalent to 255 decimal)

摘自 PHP 的說明文件

浮點數

在 PHP 中,浮點數用來表示實數的一部分。它們由一個或多個數字組成,並以小數分隔符隔開。

<?php

$a = 1.234; 
$b = 1.2e3; 
$c = 7E-10;
$d = 1_234.567; // as of PHP 7.4.0

常見陷阱

並非所有數字和算術運算都能用浮點數來完成。用浮點數來表示金額可能導致捨入誤差。

<?php

$result = 0.1 + 0.2; // => 0.30000000000000004

算術運算子

PHP 提供了多種運算子來執行算術運算。PHP 的算術運算子遵循標準的數學運算順序。PHP 提供的運算子有:

  • 正號(+)
  • 負號(-)
  • 加法(+)
  • 減法(-)
  • 乘法(*)
  • 除法(/)
  • 取模(%)
  • 次方(**)
$moles = +'10';
$aLotOfMoles = 6.022 * 10**23 * $moles;

說明

Lilly 喜歡烹飪。 她想和朋友舉辦一場披薩派對。 為了充分利用食材,她需要在開始前知道每種食材需要多少。

為了解決這個問題,Lilly 已經草擬了一個程式來自動處理部分規劃,但需要你幫忙完成。 你願意幫 Lilly 舉辦一場比例完美的披薩派對嗎?

1. 麵團比例

Lilly 喜歡薄脆、餅皮較薄的披薩。 中間所需的麵團至少為 200 公克,但每多供應一個人,就需要再 20 公克麵團。

grams = pizzas * ((persons * 20) + 200)

Lilly 需要一個函式,它會:

  • 接受披薩的數量
  • 以及每個披薩要供應的人數
  • 並回傳所需麵團量,取最接近的公克數。

例如,要做 4 個可供 8 人食用的披薩:

<?php

$pizza_pi = new PizzaPi();
$pizza_pi->calculateDoughRequirement(4, 8);
// => 1440

2. 一點醬汁

Lilly 塗抹醬汁時非常講究,但她的披薩大小可能不一致。 根據她的經驗,她知道每個披薩需要 125 毫升醬汁。 Lilly 需要一個函式,計算要買幾罐醬汁。

cans of sauce = pizzas * sauce per pizza / sauce can volume

例如,Lilly 需要做 8 個披薩,而每罐是 250 毫升:

<?php

$pizza_pi = new PizzaPi();
$pizza_pi->calculateSauceRequirement(8, 250);
// => 4

3. 來點起司吧

起司以正立方體販售,並依大小計價。

Lilly 使用的公式不是披薩面積公式,因為她 不想 讓起司覆蓋整個面積。 她決定使用以下公式,來判斷邊長(cheese_dimension)的起司方塊可以做出多少個直徑(diameter)的披薩:

pizzas = (cheese_dimension³) / (thickness * PI * diameter)

建立一個函式,它會:

  • 接受起司方塊的邊長
  • 接受想要的起司層厚度
  • 接受披薩的直徑
  • 並使用 Lilly 的公式回傳可做出的披薩數量,並無條件捨去。

例如,給定一個 25x25x25 公分的起司方塊、0.5 公分厚的起司層,以及直徑 30 公分的披薩:

<?php

$pizza_pi = new PizzaPi();
$pizza_pi->calculateCheeseCubeCoverage(25, 0.5, 30);
// => 331

4. 公平分配

最後,Lilly 想讓她的披薩每個都切成 8 片,並平均分給她的朋友。

建立一個函式,它會:

  • 接受披薩數量和朋友數量
  • 並回傳如果每個人拿走相同數量的切片後,會剩下多少片披薩。

例如:

<?php

$pizza_pi = new PizzaPi();
$pizza_pi->calculateLeftOverSlices(2, 4);
// => 0
$pizza_pi->calculateLeftOverSlices(4, 3);
// => 2
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
PHP Exercism

準備好開始 披薩圓周率 了嗎?

註冊 Exercism,透過 11 個概念122 個練習 和真人引導來學習並精通 PHP,全部免費。