我正在尝试编写一个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的值,给我这个结果。
[
" ",
" *",
" **"
]
我知道我错过了一些东西,因为我也无法得到正确的一面。这种逻辑很少混淆。有人可以帮忙吗?
答案 0 :(得分:2)
您的增量space
和stars
计数在这一点上是矛盾的:
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)
基本编程逻辑是这样的:
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;
我用过&#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();
}