轨道
/
PHP
PHP
/
练习
/
Pizza Pi
Pizza Pi

Pizza Pi

学习练习

简介

整数

整数是不带小数部分的数,属于集合 {..., -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

准备好开始 Pizza Pi 了吗?

注册 Exercism,借助 11 个概念122 个练习 和真人导师指导,学习并掌握 PHP,全部免费。