zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    窗口的基本手势事件处理
    用户自定义手势,并识别
    安卓程序国际化,手机屏幕适配器
    排序:冒泡,快排,归并。
    哈夫曼树学习
    二叉树的学习。
    ArrayList和vector的区别
    关于try-catch-finally return 的面试题
    Java中的抽象和封装
    关于SelectedValue的众多解决方案
  • 原文地址:https://www.cnblogs.com/kerita/p/5280868.html
Copyright © 2011-2022 走看看