用js寫直角三角形,等腰三角形,菱形

//1、 畫一個直角三角形
    // 第幾行   *號數
    // *        1        1  
    // **       2        2
    // ***      3        3
    // ****     4        4
    // *****    5        5
    // 規律:行數 = *號數
    function left(n){  //  right爲函數名,n爲形式參數,用於接收實體參數。
        for(var i = 1; i <= n; i++){    //  聲明i爲打印行數
            for(var j = 1; j <= i; j++){       //聲明j爲一行打印多少個*
                document.write("*");
            }
            document.write("<br>");     //每打印一行就執行一次換行
        }
    }
    left(5);      //要求函數打印10行*,實體參數!



    // 2、畫一個直角三角形
    //     *    4    空格    1    *
    //    **    3    空格    2    *
    //   ***    2    空格    3    *
    //  ****    1    空格    4    *
    // *****    0    空格    5    *
    // 規律: 一行 : 空格 + *;
    //          空格 = 總行數 - 空格所在行數
    //          行數 = *號數
    function right(n){
        for(var i = 1; i <= n; i++){    //  聲明i爲打印行數
            for(var k = 1; k <= n - i; k++){ //聲明k爲打印空格
                document.write("&ensp;");
            }
            for(var j = 1; j <= i; j++){       //聲明j爲一行打印多少個*
                document.write("*");
            }
            document.write("<br>");     //每打印一行就執行一次換行
        }
    }
    right(5);

    // 3、畫一個等腰三角形
    //                         行數
    //         鋒             j= 1     空格 4       鋒    1
    //       鋒鋒鋒          j= 2      空格 3        鋒    3
    //     鋒鋒鋒鋒鋒         j= 3      空格 2       鋒    5
    //   鋒鋒鋒鋒鋒鋒鋒       j = 4     空格 1       鋒    7
    // 鋒鋒鋒鋒鋒鋒鋒鋒鋒       j = 5    空格 0       鋒    9
    //                                 空格5-j      鋒   2*j-1
    // 思路:咱們輸出的空格數只算文字左邊的便可!按最大行數-鋒字個數
    // 規律: 空格 = 最大行數 - 單個行數;  鋒 = 2 * 單個行數 - 1;
    function all(n){
        for(var i = 1; i <= n; i++){    //  聲明i爲打印行數
            for(var k =1; k <= n - i; k++){     //聲明k爲打印空格
                document.write("&emsp;");
            }
            for(var f = 1; f <= 2*i - 1; f++){  //聲明f爲打印文字
                document.write("鋒");
            }
            document.write("<br>");
        }
    }
    all(5);
    // 注意:  &nbsp;   不斷行的空白(1個字符寬度)
    //        &ensp;     半個空白(1個字符寬度)
    //        &emsp;     一個空白(2個字符寬度)
    //        &thinsp;   窄空白(小於1個字符寬度)
    // 此處用的&emsp;至關於一個漢字寬度


    // 4、畫一個菱形方案一
    //                         行數
    //         鋒             j= 1     空格 4       鋒    1
    //       鋒鋒鋒          j= 2      空格 3        鋒    3
    //     鋒鋒鋒鋒鋒         j= 3      空格 2       鋒    5
    //   鋒鋒鋒鋒鋒鋒鋒       j = 4     空格 1       鋒    7
    // 鋒鋒鋒鋒鋒鋒鋒鋒鋒       j = 5    空格 0       鋒    9
    //   鋒鋒鋒鋒鋒鋒鋒                              空格5-j      鋒   2*j-1
    //     鋒鋒鋒鋒鋒
    //       鋒鋒鋒
    //         鋒 
    //  思路:作兩個等腰三角形,一個朝上,一個朝下,下面的去掉一行,避免中間重複,由於菱形行數都是奇數
     function up(n){
        //  上面一個
        for(var i = 1; i <= n; i++){    //  聲明i爲打印行數
            for(var k =1; k <= n - i; k++){     //聲明k爲打印空格
                document.write("&emsp;");
            }
            for(var f = 1; f <= 2*i - 1; f++){  //聲明f爲打印文字
                document.write("鋒");
            }
            document.write("<br>");
        }
        // 下面一個
        // 重點:首先行數要減一;第二,文字是從多一次減小,因此行數範圍和自增自減要改變!
        for(var i = n - 1; i >= 1; i--){    //  聲明i爲打印行數
            for(var k =1; k <= n - i; k++){     //聲明k爲打印空格
                document.write("&emsp;");
            }
            for(var f = 1; f <= 2*i - 1; f++){  //聲明f爲打印文字
                document.write("鋒");
            }
            document.write("<br>");
        }
    }
    up(9);

    //拓展  作一個空心菱形
    //         鋒
    //        鋒 鋒
    //       鋒   鋒
    //      鋒     鋒
    //     鋒       鋒
    //    鋒         鋒
    //   鋒           鋒
    //  鋒             鋒
    // 鋒               鋒
    //  鋒             鋒
    //   鋒           鋒
    //    鋒         鋒
    //     鋒       鋒
    //      鋒     鋒
    //       鋒   鋒
    //        鋒 鋒
    //         鋒
    
    function up(n) {
        //  上面一個
        for (var i = 1; i <= n; i++) {    //  聲明i爲打印行數
            for (var k = 1; k <= n - i; k++) {     //聲明k爲打印空格
                document.write("&emsp;");
            }
            for (var f = 1; f <= 2 * i - 1; f++) {  //聲明f爲打印文字
                // document.write("鋒");
                if (f == 1 || f == 2 * i - 1) {    //當文字爲第一個或最後一個時打印
                    document.write("鋒");
                } else {                         //不然這一行其餘爲空
                    document.write("&emsp;");
                }
            }
            document.write("<br>");
        }
        // 下面一個
        // 重點:首先行數要減一;第二,文字是從多一次減小,因此行數範圍和自增自減要改變!
        for (var i = n - 1; i >= 1; i--) {    //  聲明i爲打印行數
            for (var k = 1; k <= n - i; k++) {     //聲明k爲打印空格
                document.write("&emsp;");
            }
            for (var f = 1; f <= 2 * i - 1; f++) {  //聲明f爲打印文字
                // document.write("鋒");
                if (f == 1 || f == 2 * i - 1) {     //當文字爲第一個或最後一個時打印
                    document.write("鋒");
                } else {                          //不然這一行其餘爲空
                    document.write("&emsp;");
                }
            }
            document.write("<br>");
        }
    }
    up(9);

    // 畫一個菱形方案二
    // 思路:咱們把菱形當作上下對稱的階梯
    //-4          鋒               
    //-3        鋒鋒鋒
    //-2      鋒鋒鋒鋒鋒
    //-1    鋒鋒鋒鋒鋒鋒鋒
    //0   鋒鋒鋒鋒鋒鋒鋒鋒鋒
    //1     鋒鋒鋒鋒鋒鋒鋒
    //2       鋒鋒鋒鋒鋒
    //3         鋒鋒鋒
    //4           鋒

    // j=-4  空格   4    鋒   9-2*4=1
    // j=-3  空格   3    鋒   9-2*3=3
    // j=-2  空格   2    鋒   9-2*2=5    
    // j=-1  空格   1    鋒   9-2*1=7    
    // j=0   空格   0    鋒   9-2*0=9    
    // j=1   空格   1    鋒   9-2*1=7    
    // j=2   空格   2    鋒   9-2*2=5   
    // j=3   空格   3    鋒   9-2*3=3    
    // j=4   空格   4    鋒   9-2*4=1    

    // 用到到方法:     Math.abs(-10)  => 10     取絕對值
    function center(n) {
        var mid = parseInt((n - 1) / 2); // =>  4  聲明一個對稱範圍
        for(var i = -mid; i <= mid; i++){   //聲明行數爲-4
            for(var k = 1; k <= Math.abs(i); k++){  //聲明k爲空格數,小於等於行數的絕對值
                document.write("&emsp;");
            }
            for(var f = 1; f <= n - 2 * Math.abs(i); f++){  
                // 聲明f爲文字數,取值範圍爲:總行數 - 2 * 單行行數的絕對值
                document.write("鋒");
            }
            document.write("<br>");
        }
    }
    center(9);
    // 此處有個小bug,實參取值必須是奇數!又菱形固有原理決定
相關文章
相關標籤/搜索