//一、 画一个直角三角形
// 第几行 *号数
// * 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行*,实体参数!
// 二、画一个直角三角形
// * 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(" ");
}
for(var j = 1; j <= i; j++){ //声明j为一行打印多少个*
document.write("*");
}
document.write("<br>"); //每打印一行就执行一次换行
}
}
right(5);
// 三、画一个等腰三角形
// 行数
// 锋 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(" ");
}
for(var f = 1; f <= 2*i - 1; f++){ //声明f为打印文字
document.write("锋");
}
document.write("<br>");
}
}
all(5);
// 注意: 不断行的空白(1个字符宽度)
//   半个空白(1个字符宽度)
//   一个空白(2个字符宽度)
//   窄空白(小于1个字符宽度)
// 此处用的 相当于一个汉字宽度
// 四、画一个菱形方案一
// 行数
// 锋 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(" ");
}
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(" ");
}
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(" ");
}
for (var f = 1; f <= 2 * i - 1; f++) { //声明f为打印文字
// document.write("锋");
if (f == 1 || f == 2 * i - 1) { //当文字为第一个或最后一个时打印
document.write("锋");
} else { //否则这一行其他为空
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(" ");
}
for (var f = 1; f <= 2 * i - 1; f++) { //声明f为打印文字
// document.write("锋");
if (f == 1 || f == 2 * i - 1) { //当文字为第一个或最后一个时打印
document.write("锋");
} else { //否则这一行其他为空
document.write(" ");
}
}
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(" ");
}
for(var f = 1; f <= n - 2 * Math.abs(i); f++){
// 声明f为文字数,取值范围为:总行数 - 2 * 单行行数的绝对值
document.write("锋");
}
document.write("<br>");
}
}
center(9);
// 此处有个小bug,实参取值必须是奇数!又菱形固有原理决定
原文地址:https://www.cnblogs.com/zhang-qi/p/12075477.html