无法按预期创建塔

时间:2017-01-02 13:21:57

标签: javascript

我正在尝试编写一个JavaScript代码来构建这样的塔:

// For nFloors = 3 floors
[
  '  *  ', 
  ' *** ', 
  '*****'
]

// For nFloors = 6 floors, etc...
[
  '     *     ', 
  '    ***    ', 
  '   *****   ', 
  '  *******  ', 
  ' ********* ', 
  '***********'
]

我知道我必须从底部开始并继续逻辑。现在我已经到了这个:

function towerBuilder(nFloors) {
  var finalArray = [];
  for (var i = nFloors - 1; i >= 0; i--) {
    var spaces = nFloors - i;
    var stars = i;
    finalArray.push(" ".repeat(spaces) + "*".repeat(stars));
  }
  return finalArray.reverse();
}

我只能得到它的一半。例如,nFloors = 3的值,给我这个结果。

[
  "   ",
  "  *",
  " **"
]

我知道我错过了一些东西,因为我也无法得到正确的一面。这种逻辑很少混淆。有人可以帮忙吗?

4 个答案:

答案 0 :(得分:2)

您的增量spacestars计数在这一点上是矛盾的:

finalArray.push(" ".repeat(spaces) + "*".repeat(stars));

您需要通过在右侧添加spaces来更改它。在您的情况下,您需要在0之前完成它。

for (var i = nFloors - 1; i > 0; i--) {

我尝试用这种方式解决你的代码:

function towerBuilder(nFloors) {
  var finalArray = [];
  var numSpaces = 0;
  // Start from the reverse.
  for (i = nFloors; i > 0; i--) {
    // At the end, the number of spaces are 0.
    // Have one and less for the half of the stars.
    // Add another set of spaces.
    finalArray.push(" ".repeat(numSpaces) + "*".repeat(i) + "*".repeat(i-1)  + " ".repeat(numSpaces));
    // Increment the space, while going to top.
    numSpaces++;
  }
  // Reverse the array.
  return finalArray.reverse();
}
console.log(towerBuilder(3));

我会采取不同的方式,这就是我解决类似问题的方法。所以你的最终片段应该是:

function towerBuilder(nFloors) {
  var space = "";
  var star = "";
  var result = [];
  for (var i = 1; i <= nFloors; i++) {
    space = (" ").repeat(nFloors - i);
    star = ("*").repeat((2 * i) - 1);
    result.push(space + star + space);
  }
  return result;
}
console.log(towerBuilder(3));

答案 1 :(得分:0)

基本编程逻辑是这样的:

&#13;
&#13;
function pyramidStar(n) {
  var str = "";

  for (var i = 1; i <= n; i++) {
    for (var j = 1; j <= n - i; j++)
      str += ". .";
    for (j = 1; j <= 2 * i - 1; j++)
      str += " *";
    str += "<br />";
  }

  return str;
}
document.getElementById("result").innerHTML = pyramidStar(9);
&#13;
<div id="result"></div>
&#13;
&#13;
&#13;

我用过&#39;。&#39;而不是空格,因为在html中多个空格被视为单个空格。

答案 2 :(得分:0)

在这个问题中,你必须关心空间和星星的数量 在每个楼层。您可以在每个楼层的星号= (floor number) * 2 - 1看到。例如。对于2楼 - 星数= (2 * 2 -1) = 3,例如3楼= (3*2 -1) = 5。对于空间,它等于 nFloor(total number of floor) - 当前楼层。所以nFloor = 3和。{ current floor = 1。每边的空格数= 3 - 1 = 2 星星。同样,当前楼层2 = 3 - 2 = 1。因此,把这个 代码中的逻辑

    function towerBuilder(nFloors) {
      let a = []; //for storing final number of stars and spaces
      let temp = ''; //storing stars and spaces during inner iteration

      //iterating through each floor

      for(let i=0;i<nFloors; i++)
      {

      //storing spaces on left side of the stars.                           
     //Using i+1 because loop is starting from index 0.
        for(let s=0;s<(nFloors-(i+1));s++)
        temp = temp + ' ';

      //storing stars.Using i+1 because loop is starting from index 0.
        for(let j=0;j<(i+1)*2-1;j++)
            temp = temp + '*'

      //for storing stars on the right side of the stars.                   
     //Using i+1 because loop is starting from index 0.
        for(let s=0;s<(nFloors-(i+1)) ;s++)
        temp = temp + ' ';

      //storing tower at each floors  
        a.push(temp)

      //setting temp to null for fresh start for next floor  
        temp = '';

      }
    //returning final tower
      return a;
    }

答案 3 :(得分:0)

function towerBuilder(nFloors) {
  let array = [];
  for (let i = nFloors; i >= 1; i--) {
    let space = (nFloors - i);
    let stars = i * 2 - 1;
    array.push(" ".repeat(space) + "*".repeat(stars) + " ".repeat(space));
  }
  return array.reverse();
}