• JavaScript打印杨辉三角


    1、什么是杨辉三角?


    1 1 
    1 2 1 
    1 3 3 1 
    1 4 6 4 1 

    上面就是一个简单的杨辉三角的例子

    观察一下,

    第n行有n个元素,

    第n行的第一个元素和第n个元素为1,

    其他元素,假设为第n行第m个元素,则其值为第n-1行第m-1个元素+第n-1行第m个元素。

    2、附上代码

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>杨辉三角</title>
    
        <style type="text/css">
            
            div#container{
                width: 300px;
                margin: 0 auto;
            }
    
        </style>
    </head>
    <body>
    
    <div id="container">
        
            <div>
            <input type="text" placeholder="输入行数" id="input"/>
        </div>
    
        <div>
            <br/>
            <button id="post" >打印杨辉三角</button>
        </div>
    </div>
    
        <script type="text/javascript">
            
            var input = document.getElementById("input");
            var submit = document.getElementById("post");
    
            submit.onclick = function(){
    
                var inputvValue = input.value;
                var lineNumber = parseInt(inputvValue);
    
                if(!lineNumber){
                    alert("您的输入是"+inputvValue+",有误,请重新输入!");
                }
                else{
    
                    //新建数组,放置杨辉三角
                    var array = new Array(lineNumber);
    
                    for(var k=0;k<lineNumber;k++){
                        array[k] = new Array();
                    }
    
                    var type = "";
    
                    for(var i=0;i<lineNumber;i++){
    
                        for(var j=0;j<=i;j++){
    
                            //每一行首尾两个元素赋值为1
                            if(0 == j || i == j){
                                array[i][j] = 1;
                                type+=array[i][j]+" ";
                            }
                            //其他元素为上一行前一列元素上一行这一列元素
                            else {
                                array[i][j] = array[i-1][j-1] + array[i-1][j];
    
                                type+=array[i][j]+" ";
                            }
    
                        }
                            type+="<br/>";
                    }
    
                    var container = document.getElementById("container");
    
                    container.innerHTML+=type;
    
                }
    
            };
    
        </script>
    </body>
    </html>

    3、额外发现的问题

    上面代码的click事件只能被触发一次,想再次打印需要刷新,是因为使用innerHtml,使得html被重新加载,里面绑定的事件不见了。

    解决方法是不用innerHtml,而是生成节点插入

                var text = document.createTextNode(type);
                container.appendChild(text);

    而代码没有修改是因为如果生成节点的话,"<br/>"会被当做文本插入,而不会换行,所以不采用这种方法。

    但是呢,下一次碰到采用innerHtml且click事件只能被触发一次时,就能用上述这种方法了。

    本文由作者原创,有什么错误欢迎指教,转载请注明出处http://www.cnblogs.com/kerita/p/5280868.html

  • 相关阅读:
    Python之路,Day2
    Dnsmasq安装与配置-搭建本地DNS服务器 更干净更快无广告DNS解析
    bind+dlz+mysql实现区域记录动态更新
    SUSE下FTP服务器搭建
    最简单粗暴的http文件列表
    shell脚本监控MySQL服务是否正常
    解决问题:Jupyter Notebook启动不会自动打开浏览器,每次都要自己打开浏览器输入网址
    让Jupyter Notebook个性化
    数据预处理小结
    多模型融合推荐算法
  • 原文地址:https://www.cnblogs.com/kerita/p/5280868.html
Copyright © 2020-2023  润新知