杨辉三角

发布时间 2023-04-19 20:10:53作者: uleft_right

杨辉三角需要考虑内容

  • 杨辉三角中的各部分数据是如何形成的
  • 打印输出过程中,每行到底需要空多少格,浏览器中直接居中展示即可,如果是文本中该如何显示
  • 未控制单个数字长度时候,展示出来曲线效果如何解决
  • 前几行都是一位数字,出现多位数字时候,未控制数字每个数字长度,出现重叠现象该怎么办



下面代码可直接拷贝到文本文件中,将文本文件后缀修改成.html,在浏览器中打开即可显示效果

使用HTML展示杨辉三角
<html>
    <head>
        <title>杨辉三角</title>
        <style>
            #main {
                text-align: center;
            }
            #dis {
                margin-top: 10px;
                background-color: #a2f2d0;
            }
            .label-v {
                text-align: center;
                display: inline-block;
            }
        </style>
    </head>
    <body>
        <div id="main">
            <div>
                <input id="number" type="number" value="1" style="font-weight: bold; height: 30px;" onchange="print();" />
            </div>
            <div id="dis">

            </div>
        </div>
    </body>
    <script>
        function print() {
            document.getElementById('dis').innerText = '';
            var num = document.getElementById("number").value;

            var list = [];
            if (num > 0) {
                var firstRow = [];
                firstRow.push(1);
                list.push(firstRow);
            }

            if (num > 1) {
                var secondRow = [];
                secondRow.push(1, 1);
                list.push(secondRow);
            }

            for (var i = 2; i < num; i++) {
                var currentInts = getInt(list[i - 1], i);
                list.push(currentInts);
            }
            var lastRow = list[list.length - 1];
            var max = lastRow[Math.floor(lastRow.length / 2)];
            var maxLength = (max + '').length;

            for (var i = 0; i < list.length; i++) {
                var rowDiv = document.createElement('div');

                for (var j = 0; j < list[i].length; j++) {
                    var cell = document.createElement('label');
                    cell.innerText = list[i][j];
                    cell.style = "width: " + (10 * maxLength) + "px";
                    cell.className = 'label-v';
                    
                    rowDiv.appendChild(cell);
                    if (j != list[i].length - 1) {
                        rowDiv.appendChild(createSpace());
                    }
                }
                
                document.getElementById('dis').appendChild(rowDiv);
            }
        };

        function createSpace() {
            var spaceDom = document.createElement('label');
            spaceDom.innerText = ' ';
            spaceDom.style = 'text-align: center';
            return spaceDom;
        }
        
        function getInt(pre, current) {
            var currentInts = [];
            currentInts.push(1);
            for (var i = 0; i < current; i++) {
                if (i < pre.length - 1) {
                    var val = pre[i] + pre[i + 1];
                    currentInts.push(val);
                }
                else {
                    currentInts.push(pre[i]);
                }
            }
            return currentInts;
        }
        
        window.onload = print();
    </script>
</html>