我正在尝试创建一个函数,给定行和列,将计算帕斯卡三角形中该位置的值。
例子:
val = GetPasVal(3, 2); // returns 2
所以在这里我指定第 3 行第 2 列,如您所见:
1
1 1
1 2 1
...应该是2。
我正在尝试创建一个函数,给定行和列,将计算帕斯卡三角形中该位置的值。
val = GetPasVal(3, 2); // returns 2
所以在这里我指定第 3 行第 2 列,如您所见:
1
1 1
1 2 1
...应该是2。
使用 Armen 方程实现帕斯卡三角形的递归代码将如下所示:
using System;
using System.Collections.Generic;
public class Program
{
public void Main()
{
for(int i =0 ; i<5;i++)
{
int sum = 1;
Console.WriteLine();
for(int j =0 ; j<=i;j++)
{
Console.Write(pascal(i,j));
//Console.Write(sum); //print without recursion
sum= sum *(i-j) / (j + 1);
}
}
}
public int pascal(int x, int y)
{
if((x+1)==1 || (y+1)==1 || x==y)
{
return 1;
}
else
{
return pascal(x-1,y-1)+ pascal(x-1,y);
}
}
}
Combinations 中有一个公式可以计算出帕斯卡三角形中任何位置的值:
它通常是这样调用n choose k
和编写的:
n choose k = n! / k!(n-k)!
表示法:n choose k
也可以写成C(n,k)
, nCk
.
static void Main(string[] args)
{
var x = GetPasVal(3, 2);
Console.WriteLine(x);
}
public static long GetPasVal(int row, int col)
{
int factOfRow = 1,i;
for(i = 1;i<=(row - 1);i++)
factOfRow *= i;
int factOfRowMinusCol = 1;
for(i = 1;i<=(row - 1)- (col - 1);i++)//check out below link to understand condition
factOfRowMinusCol *= i;
int factOfCol = 1;
for(i = 1;i<= (col - 1);i++)
factOfCol *=i;
int fact = factOfRow / (factOfCol * factOfRowMinusCol);
return fact;
}
for row in range(10):
print('{: ^45}'.format(' '.join(str(pascal(row, col)) for col in range(row+1))))
使用上面的代码打印出你的帕斯卡三角形,从而修改代码。前 10 个应如下所示:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
GetPasVal 方法将计算帕斯卡三角形中的所有数字,直到您给出的点(高度),然后该方法将返回该行上的索引值(宽度)。这是你可以使用的东西。这很简单。你只需要使用一个锯齿状数组。
static void Main(string[] args)
{
var x = GetPasVal(3, 2);
Console.WriteLine(x);
}
public static long GetPasVal(int height, int width)
{
long[][] triangle = new long[height][];
for (int i = 0; i < height; i++)
{
triangle[i] = new long[i + 1];
triangle[i][0] = 1;
triangle[i][i] = 1;
if (i >= 2)
{
for (int j = 1; j < i; j++)
{
triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j];
}
}
}
return triangle[height - 1][width - 1];
}