九九乘法表是經典的編程入門練習,考察雙層循環控制、字符串拼接、輸出格式化能力。本文展示從最基礎的實現到面試加分的優化版本,涵蓋 HTML 表格、CLI 對齊、函數式風格等多種輸出格式。
<?php
for ($i = 1; $i <= 9; $i++) {
for ($j = 1; $j <= $i; $j++) {
echo "{$j}×{$i}=" . ($j * $i) . ' ';
}
echo PHP_EOL; // 換行
}
輸出:
1×1=1 1×2=2 2×2=4 1×3=3 2×3=6 3×3=9 ... 1×9=9 2×9=18 ... 9×9=81
$i 代表被乘數$i),變量 $j 代表乘數$j <= $i 實現下三角矩陣輸出,避免重複(如 2×3 與 3×2)<?php
function multiplicationTableHtml(): string
{
$html = '';
for ($i = 1; $i <= 9; $i++) {
$html .= '';
for ($j = 1; $j <= 9; $j++) {
if ($j <= $i) {
$html .= "{$j}×{$i}=" . ($j * $i) . " ";
} else {
$html .= '— ';
}
}
$html .= ' ';
}
$html .= '
';
return $html;
}
echo multiplicationTableHtml();
<?php
function multiplicationTableCli(): void
{
// 計算最大寬度:9×9=81 → 6 字符,預留 2 字符間距
$cellWidth = 8;
for ($i = 1; $i <= 9; $i++) {
$line = '';
for ($j = 1; $j <= $i; $j++) {
$expr = "{$j}×{$i}=" . ($j * $i);
$line .= str_pad($expr, $cellWidth, ' ', STR_PAD_RIGHT);
}
echo $line . PHP_EOL;
}
}
/* 輸出效果:
1×1=1 1×2=2 2×2=4 1×3=3 2×3=6 3×3=9 ...
每列完美對齊,適合終端演示
*/
<?php
$table = array_map(fn($i) =>
implode(' ', array_map(fn($j) => "{$j}×{$i}=" . ($j * $i), range(1, $i))),
range(1, 9)
);
echo implode(PHP_EOL, $table);
<?php
function multiplicationGenerator(): Generator
{
for ($i = 1; $i <= 9; $i++) {
for ($j = 1; $j <= $i; $j++) {
yield "{$j}×{$i}=" . ($j * $i);
}
}
}
foreach (multiplicationGenerator() as $expr) {
echo $expr . ' ';
// 可在此處理每行換行邏輯...
}
$j <= 9 或 $j <= $i 修改條件 |
| 時間複雜度? | 算法分析 | O(n²),n=9 為常數,實際 O(1) |
| 如何處理大數乘法(如 99×99)? | 擴展性 | 字符串乘法或 BCMath 擴展 bcmul() |
| 能否不用乘法運算符實現? | 邏輯思維 | 累加法:$result = 0; for($k=0;$k<$j;$k++) $result += $i; |
| 如何單元測試? | 工程化 | 斷言輸出字符串包含預期表達式,或測試生成器產出序列 |
<?php
class MultiplicationTable
{
public function __construct(
private int $maxFactor = 9,
private string $format = '{a}×{b}={c}',
private string $separator = ' '
) {}
public function generate(): array
{
$lines = [];
for ($i = 1; $i <= $this->maxFactor; $i++) {
$line = [];
for ($j = 1; $j <= $i; $j++) {
$line[] = strtr($this->format, [
'{a}' => (string)$j,
'{b}' => (string)$i,
'{c}' => (string)($j * $i),
]);
}
$lines[] = implode($this->separator, $line);
}
return $lines;
}
public function renderHtml(): string
{
$html = '';
foreach ($this->generate() as $line) {
$html .= '' . implode(' ', explode($this->separator, $line)) . ' ';
}
$html .= '
';
return $html;
}
}
// 使用
$table = new MultiplicationTable(12, '{a}×{b}={c}', ' | ');
echo implode(PHP_EOL, $table->generate());
九九乘法表看似簡單,實則包含雙層循環控制、邊界條件判斷、格式化輸出、擴展性設計等核心編程素養。面試時:
$j <= $i 避免重複這不僅是寫對乘法表,更是展示「從基礎到工程化」的思維深度。