2

我在尝试解决这个问题时遇到了一些麻烦。下面的代码:

function pasc(n){
var result = [[1]];
for (var row = 1; row < n; row++){
    for (var col = 1; col <= row; col++){
        result[row][col] = result[row - 1][col] + result[row - 1][col - 1];
    }
}
return result;
}
pasc(10)
for (var i = 0; i < result.length; i++){
    document.write(result[i]+"<br>");
}

似乎问题在于使用类似的表达式将值分配给数组myArray[1][1] = "foo"

我对此感到困惑,因为我可以这样做:var myArray = []; myArray[4] = "foo"这似乎表明可以在 1 维数组中的任意位置创建元素,但不能使用 2 维。

任何有助于消除我的误解的帮助表示赞赏。

4

10 回答 10

6

可以使用递归打印帕斯卡三角形

下面是递归工作的代码片段。

我们有一个递归函数 pascalRecursive(n, a) 直到打印行数。每行都是二维数组的一个元素(在本例中为“a”)

    var numRows = 10,
        triangle, 
        start, 
        stop;

    // N is the no. of rows/tiers 
    // a is the 2-D array consisting of the row content

    function pascalRecursive(n, a) {

      if (n < 2) return a; 

      var prevRow = a[a.length-1];
      var curRow = [1];

      for (var i = 1; i < prevRow.length; i++) {
        curRow[i] = prevRow[i] + prevRow[i-1];
      }
      curRow.push(1);
      a.push(curRow);

      return pascalRecursive(n-1, a); // Call the function recursively
    }


    var triangle = pascalRecursive(numRows, [[1]]);

    for(var i = 0; i < triangle.length; i++)
      console.log(triangle[i]+"\n");

于 2017-06-07T02:23:02.660 回答
1

JavaScript 没有二维数组。它所拥有的是恰好包含其他数组的数组。所以,是的,你可以给数组中的任意位置赋值,数组会神奇地让自己变得足够大,用'undefined'填充任何空白......但是你不能给任何位置赋值您尚未明确创建的子数组。您必须先将子数组分配给第一个数组的位置,然后才能将值分配给子数组的位置。

更换

for (var row = 1; row < n; row++){
    for (var col = 1; col <= row; col++){

for (var row = 1; row < n; row++){
    result[row] = [];
    for (var col = 1; col <= row; col++){

应该这样做。无论如何,假设您的所有索引逻辑都是正确的。你也有一些问题,因为你的初始数组只包含一个值,所以result[row][col] = result[row - 1][col] + result[row - 1][col - 1];访问至少一个从未定义过的单元格。

于 2015-06-24T10:22:05.637 回答
1

谢谢洛根河基尔斯利。我现在已经解决了:

function pasc(n){
var result = [];
    result[0] = [1];
    result[1] = [1,1];
for (var row = 2; row < n; row++){
    result[row] = [1];
    for (var col = 1; col <= row -1; col++){
        result[row][col] = result[row-1][col] + result[row-1][col-1];
        result[row].push(1);
    }
}
return result;
}

for (var i = 0; i < pasc(10).length; i++){
    document.write(pasc(10)[i]+"<br>");
    console.log(pasc(10)[i]+"<br>");
}
于 2015-06-24T22:12:51.527 回答
0

这是我在 javascript 中为帕斯卡三角形创建的代码

'use strict'
let noOfCoinFlipped = 5
let probabiltyOfnoOfHead = 2
var dataStorer = [];

for(let i=0;i<=noOfCoinFlipped;i++){
    dataStorer[i]=[];
    for(let j=0;j<=i;j++){
        if(i==0){
            dataStorer[i][j] = 1;
        }
        else{
            let param1 = (j==0)?0:dataStorer[i-1][j-1];
            let param2 = dataStorer[i-1][j]?dataStorer[i-1][j]:0; 
            dataStorer[i][j] = param1+param2;
      }
    }
}

let totalPoints = dataStorer[noOfCoinFlipped].reduce((s,n)=>{return s+n;})
let successPoints = dataStorer[noOfCoinFlipped][probabiltyOfnoOfHead];
console.log(successPoints*100/totalPoints)

这里也是链接 http://rextester.com/TZX59990

于 2018-05-30T06:59:27.280 回答
0

这是我的解决方案:

function pascalTri(n){
    let arr=[];
    let c=0;
    for(let i=1;i<=n;i++){
        arr.push(1);
        let len=arr.length;
        if(i>1){
            if(i>2){
               for(let j=1;j<=(i-2);j++){
                    let idx=(len-(2*i)+j+2+c);
                    let val=arr[idx]+arr[idx+1];
                    arr.push(val);
                }
                c++;
            }
            arr.push(1);    
        }
    }
    return arr;
}

let pascalArr=pascalTri(7);

console.log(pascalArr);
于 2019-01-09T21:14:53.427 回答
0

这是 n = 3 的模式

      #

     ##

    ###

这是打印这个的js代码。

function staircase(n) {
    for(var i=0 ; i<n ; i++) {
        for(var j=n-1 ; j>i ; j--)
            process.stdout.write(" ");

        for(var k=0 ; k<=i; k++) {
            process.stdout.write("#");
        }
        process.stdout.write("\n");
    }
}
于 2020-05-02T16:10:56.400 回答
0

您可以使用以下代码创建帕斯卡三角形:

function pascal(n) {
    var arr = [];
    if (n == 1) {
        arr[0] = [];
        arr[0][0] = 1;
    } else if (n == 2) {
        arr[0] = [];
        arr[0][0] = 1;
        arr[1] = [];
        arr[1][0] = 1;
        arr[1][1] = 1;
    } else if (n > 2) {
        arr[0] = [];
        arr[1] = [];
        arr[0][0] = 1;
        arr[1][0] = 1;
        arr[1][1] = 1;
        for (i = 2; i < n; i++) {
            arr[i] = [];
            arr[i][0] = 1;
            for (j = 1; j < i; j++) {
                arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
            }
            arr[i][j] = 1;
        }
    }
    console.log(arr);
    for (i = 0; i < arr.length; i++) {
        console.log(arr[i].join(' '))

    }
}

function pascal(n) {
    var arr = [];
    if (n == 1) {
        arr[0] = [];
        arr[0][0] = 1;
    } else if (n == 2) {
        arr[0] = [];
        arr[0][0] = 1;
        arr[1] = [];
        arr[1][0] = 1;
        arr[1][1] = 1;
    } else if (n > 2) {
        arr[0] = [];
        arr[1] = [];
        arr[0][0] = 1;
        arr[1][0] = 1;
        arr[1][1] = 1;
        for (i = 2; i < n; i++) {
            arr[i] = [];
            arr[i][0] = 1;
            for (j = 1; j < i; j++) {
                arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
            }
            arr[i][j] = 1;
        }
    }
    console.log(arr);
    for (i = 0; i < arr.length; i++) {
        console.log(arr[i].join(' '))

    }
}
pascal(5)

于 2015-11-30T19:17:05.633 回答
0

您可以创建任意二维数组并将其存储在其中并返回正确的 Pascal。JavaScript 没有用于创建多维数组的特殊语法。一个常见的解决方法是在嵌套循环中创建一个数组数组。

资源

这是我的解决方案版本

function pascal(input) {
  var result = [[1], [1,1]];
  if (input < 0) {
    return [];
  }
  if (input === 0) {
      return result[0];
  }

  for(var j = result.length-1; j < input; j++) {
    var newArray = [];
    var firstItem = result[j][0]; 
    var lastItem = result[j][result[j].length -1]; 
    newArray.push(firstItem);

    for (var i =1; i <= j; i++) {      
      console.log(result[j][i-1], result[j][i]);
      newArray.push(sum(result[j][i-1], result[j][i]));
    }

    newArray.push(lastItem);

    result.push(newArray);
  }
  return result[input];
 }


 function sum(one, two) {
    return one + two;
 }
于 2018-03-23T01:42:44.120 回答
0

此函数将为“n”行计算帕斯卡三角形。它将创建一个包含“n”个数组的对象,这些数组是在第二个/内部 for 循环中根据需要创建的。

function getPascalsTriangle(n) {
    var arr = {};
    for(var row = 0; row < n; row++) {
        arr[row] = [];
        for(var col = 0; col < row+1; col++) {
            if(col === 0 || col === row) {
                arr[row][col] = 1;
            } else {
                arr[row][col] = arr[row-1][col-1] + arr[row-1][col];
            }         
        }       
    }   
    return arr;
}
console.log(getPascalsTriangle(5));
于 2017-05-12T15:41:46.180 回答
0

弗洛伊德三角

您可以尝试使用以下代码创建弗洛伊德三角形

var prevNumber=1,i,depth=10;

for(i=0;i<depth;i++){
    tempStr = "";j=0;
    while(j<= i){
        tempStr = tempStr + "    " + prevNumber;
        j++;
        prevNumber++;
    }
    console.log(tempStr);
}
于 2017-07-28T18:39:31.527 回答