一道与 for 相关的字符串面试题

需求

输出

分析

1.php字符串格式化输出补全
2.每组首列自然序列,后续行元素等差20(每组的行数)叠加
3.关键 计算组,行首部,及分组列等差元素,使用三个for循环嵌套

代码

先实现缩小规模,分组为2行3列,15个序列数的货物单号。

$str = "";
$end = 15;
$start = 1;
$g_rows = 3;
$g_lines = 2;
$prefix = "YX-HL-";
$width = strlen($end);
$groups = ceil($end / ($g_lines * $g_rows));
$space = str_pad(" ", strlen($prefix) + $width);

for ($g = 0; $g < $groups; $g++) {
    // 组首部
    $g_start = $start + $g * $g_lines * $g_rows;
    for ($i = 0; $i < $g_lines; $i++) {
        // 行首部
        $line_start = $g_start + $i;
        for ($j = 0; $j < $g_rows; $j++) {
            // 列元素
            $code = $line_start + $j * $g_lines;
            // 拼接元素
            if ($code > $end) {
                if ($j == 0)
                    break 3;
                $str .= $space;
            } else {
                // 编码补0
                $str .= sprintf("%s%s", $prefix, str_pad($code, $width, "0", STR_PAD_LEFT));
            }
            // 元素留白
            if ($j != ($g_rows - 1)) {
                $str .= $space;
            }
        }
        $str .= "\n";
    }
    $str .= "\n";
}
echo $str;

效果

D:\code-base\php\test>php "d:\code-base\php\test\for.php"
YX-HL-01        YX-HL-03        YX-HL-05
YX-HL-02        YX-HL-04        YX-HL-06

YX-HL-07        YX-HL-09        YX-HL-11
YX-HL-08        YX-HL-10        YX-HL-12

YX-HL-13        YX-HL-15
YX-HL-14

补充

实现10000需求,只需要将组行列数改为20,3,终止数$end值为10000即可。

YX-HL-09902           YX-HL-09922           YX-HL-09942
YX-HL-09903           YX-HL-09923           YX-HL-09943
YX-HL-09904           YX-HL-09924           YX-HL-09944
YX-HL-09905           YX-HL-09925           YX-HL-09945
YX-HL-09906           YX-HL-09926           YX-HL-09946
YX-HL-09907           YX-HL-09927           YX-HL-09947
YX-HL-09908           YX-HL-09928           YX-HL-09948
YX-HL-09909           YX-HL-09929           YX-HL-09949
YX-HL-09910           YX-HL-09930           YX-HL-09950
YX-HL-09911           YX-HL-09931           YX-HL-09951
YX-HL-09912           YX-HL-09932           YX-HL-09952
YX-HL-09913           YX-HL-09933           YX-HL-09953
YX-HL-09914           YX-HL-09934           YX-HL-09954
YX-HL-09915           YX-HL-09935           YX-HL-09955
YX-HL-09916           YX-HL-09936           YX-HL-09956
YX-HL-09917           YX-HL-09937           YX-HL-09957
YX-HL-09918           YX-HL-09938           YX-HL-09958
YX-HL-09919           YX-HL-09939           YX-HL-09959
YX-HL-09920           YX-HL-09940           YX-HL-09960

YX-HL-09961           YX-HL-09981
YX-HL-09962           YX-HL-09982
YX-HL-09963           YX-HL-09983
YX-HL-09964           YX-HL-09984
YX-HL-09965           YX-HL-09985
YX-HL-09966           YX-HL-09986
YX-HL-09967           YX-HL-09987
YX-HL-09968           YX-HL-09988
YX-HL-09969           YX-HL-09989
YX-HL-09970           YX-HL-09990
YX-HL-09971           YX-HL-09991
YX-HL-09972           YX-HL-09992
YX-HL-09973           YX-HL-09993
YX-HL-09974           YX-HL-09994
YX-HL-09975           YX-HL-09995
YX-HL-09976           YX-HL-09996
YX-HL-09977           YX-HL-09997
YX-HL-09978           YX-HL-09998
YX-HL-09979           YX-HL-09999
YX-HL-09980           YX-HL-10000
本作品采用《CC 协议》,转载必须注明作者和本文链接
pardon110
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
开发者 @ 社科大
文章
135
粉丝
24
喜欢
103
收藏
56
排名:105
访问:8.9 万
私信
所有博文
社区赞助商