首页 > 解决方案 > 在 JavaScript 中打印钻石的来源是什么?

问题描述

我想创建一个可以向用户输入奇数并相应打印出菱形 * 的源

例子)

enter an odd number : 5



   *
  ***
 *****
  ***
   *

标签: javascript

解决方案


如果(示例),输入 = 5,你只需要学习,如何计算:

(spaces)(stars)
   2       1
   1       3
   0       5
   1       3
   2       1

let input = 7; // Number( prompt("Enter any odd integer") );
let space = " ";

/*****/
let breakPoint = Math.floor(input / 2);

let str = "", iter = 0, i = 0;
while( iter < input ) {
  str += (
    space.repeat( (breakPoint - i) ) +
    "*".repeat( 2 * i + 1 ) +
    "<br>"
  );
  
  (iter < breakPoint) ? (i++) : (i--);
  iter++;
}

document.body.innerHTML = str;
body { font-family: 'Lucida Console'; } /* Monospaced font required */

一个循环可能会令人困惑。在尝试了两个单独的循环后,我来到了它:

let input = 7;
let space = " ";

/***/

let breakPoint = Math.ceil(input / 2);

let str = "";

for( let i = 0; i < breakPoint - 1; i++ ) {
  str += (
    space.repeat( (breakPoint - i) ) +
    "*".repeat( 2 * i + 1 ) +
    "\n"
  );
}

for( let i = breakPoint - 1; i >= 0; i-- ) {
  str += (
    space.repeat( (breakPoint - i) ) +
    "*".repeat( 2 * i + 1 ) +
    "\n"
  );
}

console.log( str );

或者,KISS(保持简单愚蠢):

let input = 7;
let space = " ";

/***/

let breakPoint = Math.floor(input / 2); // 3

let str = "";

let spaces = breakPoint; // (3)
let stars = 1;

for( let i = 0; i < breakPoint; i++ ) {
  str += (
    space.repeat(spaces) +
    "*".repeat(stars) +
    "\n"
  );
  
  spaces -= 1;
  stars += 2;
}

for( let i = breakPoint; i >= 0; i-- ) {
  str += (
    space.repeat(spaces) +
    "*".repeat(stars) +
    "\n"
  );
  
  spaces += 1;
  stars -= 2;
}

console.log( str );


推荐阅读