使用嵌套循环处理复杂模式生成
嵌套循环是生成复杂图案和模式的理想工具,特别是在需要控制行、列或多个维度的输出时。下面介绍如何使用嵌套循环生成各种复杂模式。
1. 基础三角形模式
直角三角形(左对齐)
php
$rows = 5;
for ($i = 1; $i <= $rows; $i++) {
for ($j = 1; $j <= $i; $j++) {
echo "* ";
echo "\n";
输出:
倒直角三角形
php
$rows = 5;
for ($i = $rows; $i >= 1; $i--) {
for ($j = 1; $j <= $i; $j++) {
echo "* ";
echo "\n";
输出:
2. 金字塔和菱形模式
金字塔模式
php
$rows = 5;
for ($i = 1; $i <= $rows; $i++) {
// 打印空格
for ($k = $rows; $k > $i; $k--) {
echo " ";
// 打印星号
for ($j = 1; $j <= (2 * $i - 1); $j++) {
echo "*";
echo "\n";
输出:
钻石形状
php
$n = 5;
// 上半部分
for ($i = 1; $i <= $n; $i++) {
for ($j = $n; $j > $i; $j--) echo " ";
for ($k = 1; $k < 2 * $i; $k++) echo "*";
echo "\n";
// 下半部分
for ($i = $n - 1; $i >= 1; $i--) {
for ($j = $n; $j > $i; $j--) echo " ";
for ($k = 1; $k < 2 * $i; $k++) echo "*";
echo "\n";
输出:
3. 数字和字母模式
数字金字塔
php
$rows = 5;
for ($i = 1; $i <= $rows; $i++) {
for ($k = $rows; $k > $i; $k--) echo " ";
for ($j = 1; $j <= $i; $j++) echo $j;
for ($j = $i - 1; $j >= 1; $j--) echo $j;
echo "\n";
输出:
1
121
字母金字塔
php
$rows = 5;
$char = 'A';
for ($i = 1; $i <= $rows; $i++) {
for ($k = $rows; $k > $i; $k--) echo " ";
for ($j = 1; $j <= $i; $j++) echo $char++;
$char--;
for ($j = 1; $j < $i; $j++) echo --$char;
$char = 'A';
echo "\n";
/*输出:
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
4. 复杂组合模式
棋盘模式
php
$size = 8;
for ($i = 0; $i < $size; $i++) {
for ($j = 0; $j < $size; $j++) {
echo ($i + $j) % 2 == 0 ? "■ " : "□ ";
echo "\n";
输出:
螺旋矩阵
php
$n = 5;
$matrix = array_fill(0, $n, array_fill(0, $n, 0));
$value = 1;
$top = 0; $bottom = $n - 1;
$left = 0; $right = $n - 1;
while ($top <= $bottom && $left <= $right) {
// 从左到右填充顶部行
for ($i = $left; $i <= $right; $i++) $matrix[$top][$i] = $value++;
$top++;
// 从上到下填充右侧列
for ($i = $top; $i <= $bottom; $i++) $matrix[$i][$right] = $value++;
$right--;
// 从右到左填充底部行
if ($top <= $bottom) {
for ($i = $right; $i >= $left; $i--) $matrix[$bottom][$i] = $value++;
$bottom--;
// 从下到上填充左侧列
if ($left <= $right) {
for ($i = $bottom; $i >= $top; $i--) $matrix[$i][$left] = $value++;
$left++;
// 打印螺旋矩阵
for ($i = 0; $i < $n; $i++) {
for ($j = 0; $j < $n; $j++) {
printf("%2d ", $matrix[$i][$j]);
echo "\n";
输出:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
5. 高级模式技巧
使用函数生成模式
php
function printPattern($rows, $patternFn) {
for ($i = 1; $i <= $rows; $i++) {
for ($j = 1; $j <= $rows; $j++) {
echo $patternFn($i, $j, $rows) . " ";
echo "\n";
// 圆形模式
printPattern(9, function($i, $j, $n) {
$mid = ($n + 1) / 2;
$distance = sqrt(($i - $mid)**2 + ($j - $mid)**2);
return $distance < $mid ? "■" : " ";
动态模式生成
php
$patterns = [
'triangle' => function($rows) {
for ($i = 1; $i <= $rows; $i++) {
for ($j = 1; $j <= $i; $j++) echo "* ";
echo "\n";
},
'square' => function($rows) {
for ($i = 1; $i <= $rows; $i++) {
for ($j = 1; $j <= $rows; $j++) echo "* ";
echo "\n";
},
'diagonal' => function($rows) {
for ($i = 1; $i <= $rows; $i++) {
for ($j = 1; $j <= $rows; $j++) echo $i == $j ? "* " : " ";
echo "\n";
$patterns['triangle'](5);
echo "\n";
$patterns['square'](5);
echo "\n";
$patterns['diagonal'](5);
最佳实践
- 分解问题:将复杂模式分解为行和列的简单模式
- 使用辅助函数:对于特别复杂的模式,创建辅助函数计算每个位置的值
- 预计算值:对于需要复杂计算的模式,考虑预计算部分值
- 可视化调试:在开发过程中,添加调试输出显示当前行列索引
- 优化循环范围:尽量减少内层循环的计算量
嵌套循环提供了强大的模式生成能力,通过创造性地控制内外层循环的关系,可以生成几乎任何想象的到的二维模式。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.