JAVASCRIPT

时间:2018-06-08 16:16:35

标签: javascript

我是一名完整的编程新手,他正在学习JavaScript作为我的第一语言课程。

我们当前的任务是使用以下任何一项:

  • for循环
  • while循环
  • 嵌套
  • document.write

创建以下结果(没有附加输入):

1
2 3
4 5 6
7 8 9 10
11 12 13 14

序列中的最后一个数字必须是用户定义的。

我能够产生以下内容:

1
1 2 
1 2 3 
1 2 3 4 
1 2 3 4 5 
1 2 3 4 5 6 

使用编辑:请注意var“行”具有误导性(参见上面的粗体文字):

var rows = parseInt(prompt("choose end number"))
var i 
var j 

for (i = 1; i <= rows; i++)
{
    for(j=1; j<=i; j++)
    {
        document.write(j + " "); 
    }
    document.write("<br>");
}

但我无法创建破坏的东西,然后继续下一行的序列。

如果您有时间,您是否也可以根据计算机处理代码及其工作原理向我说明您发布的代码?

2 个答案:

答案 0 :(得分:1)

不确定我是否会在实践中采用不同的方法,但这样做有效:

var endNumber = parseInt(prompt("choose end number"))
var rowLength = 1; 
var rowCounter = 0;

for (var i = 1; i <= endNumber; i++) {
    document.write(i + " ");

    rowCounter++;

    if (rowCounter === rowLength) {
        rowLength++;
        rowCounter = 0;
        document.write("<br>");
    }
}

<强>解释

我的思维过程基本上是问题的两个部分。 (1)从1到最终值打印数字,(2)在某些点插入换行符。

打印数字很容易,只需要这样做:

var endNumber = parseInt(prompt("choose end number"));

for (var i = 1; i <= endNumber; i++) {
    document.write(i + " ");
}

问题的其余部分是在数字之间插入换行符,最初间隔为1,每次增加1。所以我们初始化两个变量,一个代表当前行长度(从1开始),另一个代表当前行中的一个计数器(从0开始)。

var rowLength = 1; 
var rowCounter = 0;

然后在forloop中,我们每次将计数器递增1,并检查它是否与行长度匹配。如果匹配,我们重置计数器,将行长度增加1并重置计数器。

    rowCounter++;

    if (rowCounter === rowLength) {
        rowLength++;
        rowCounter = 0;
        document.write("<br>");
    }

答案 1 :(得分:0)

这样做的一种方法是:

var rows = parseInt(prompt("choose end number"))
var i 
var j 
var count = 1

for (i = 1; i <= rows; i++)
{
             for(j=1; j<=i; j++)
             {
             document.write(count + " ");
             count  = count +1
             }
document.write("<br>");
}

我只是添加了一个count变量,并在每次写东西时递增它。 上述解决方案仍然不能从结束编号计算i。请参阅下一个解决方案。

另一种方式:我们可以只用i和j来做吗?

var N = parseInt(prompt("choose end number")) 
rows=1
while(rows*(rows+1)/2 < N){
    rows = rows+1
}
var i
var j 
for (i = 1; i <= rows; i++)
{
             for(j=1; j<=i; j++)
             {
             if (i*(i-1)/2 + j  <= N){
                 document.write(i*(i-1)/2 + j + " ");
             }
             }
document.write("<br>");
}

直到第i-1行,我们将打印出第一个i-1自然数的总和。因此,您可以将第一个i-1自然数的总和添加到j

,而不是打印j