C++ 莱布尼茨和谐三角形

C++ 莱布尼茨和谐三角形

莱布尼茨和谐三角形,也称为莱布尼茨级数或莱布尼茨公式,是17世纪末由德国数学家和哲学家哥特弗里德·威廉·莱布尼茨发现的一种数列排列形式。

莱布尼茨和谐三角形是一种分数的三角形排列。我们从顶部开始,最外层的项是自然数的倒数,表示特定的行号。一般情况下,莱布尼茨和谐三角形中的一项可以由下列公式确定,其中r是行号,c是列号,并且满足条件c ≤ r:

L(r,c) = L(r-1,c-1) – L(r,c-1),其中 L(r,1) = 1/r

下图描述了莱布尼茨和谐三角形的前3行。

C++ 莱布尼茨和谐三角形

题目描述

给定一个数字n,生成n行的莱布尼茨和谐三角形。

示例

输入

n = 3

输出

1/1 
1/2 1/2 
1/3 1/6 1/3

解释

对于n = 3,Leibniz的调和三角形有三行。每一行的最外层项=1/(行号)。

为了生成这个三角形,我们从第一行开始,也就是1/1。然后,对于第二行,我们计算每个单元格的值为左上角的单元格减去左边的单元格:

L(2, 1) = 1/2

L(2, 2) = 1/2

所以第二行是1/2 1/2。

最后,对于第三行,我们再次计算每个单元格的值为左上角的单元格减去左边的单元格

L(3,1) = L(3,3) = 1/3

L(3,2) = L(2,1) – L(3,1) = 1/6

输入

n = 4

输出

1/1 
1/2 1/2 
1/3 1/6 1/3 
1/4 1/12 1/12 1/4

解释

直到n = 3时的方法与上面的例子相同。

对于第四行

L(4,1) = L(4,4) = 1/4

L(4,2) = L(3,1) – L(4,1) = 1/3 – 1/4 = 1/12

L(4,3) = L(3,2) – L(4,2) = 1/6 – 1/12 = 1/12

解决方法

伪代码

  • 开始

  • 将n的值初始化为4。

  • 声明一个n+1行n+1列的2D向量L,并将所有元素初始化为0。

  • 使用参数n和L调用函数LHT。

  • 在函数LHT中,从i=0迭代到i<=n。

  • 在上述循环内,从j=0迭代到j<=min(i,n)。

  • 在上述循环内,如果j0或ji,则将L[i][j]的值设为1。

  • 否则,将L[i][j]的值设为L[i-1][j-1]+L[i-1][j]

  • 使用参数n和L调用函数printLHT。

  • 在函数printLHT中,从i=1迭代到i<=n。

  • 在上述循环内,从j=1迭代到j<=i。

  • 在上述循环内,打印”1/”,后跟i*L[i-1][j-1]

  • 在每个内部循环完成后打印一个新行。

  • 结束。

算法

function LHT()
    for i = 0 to n do
        for j = 0 to min(i, n) do
            if j == 0 or j == i then
                L[i][j] = 1
            else
                L[i][j] = L[i-1][j-1] + L[i-1][j]
            end if
        end for
    end for
    printLHT(n, L)
end function
function printLHT()
    for i = 1 to n do
        for j = 1 to i do
            print "1/" + i*L[i-1][j-1] + " "
        end for
        print new line
    end for
end function

function main
    Initialize n = 4
    L = 2D vector of size n + 1 x n + 1, with all elements initialized to 0
    LHT(n, L)
    return 0

示例:C++程序

下面的C++程序使用函数LHT()和printLHT()生成并打印给定行数的莱布尼兹谐波三角形。main()函数初始化行数,并创建一个大小为n + 1 * n + 1的二维向量’L’来存储项。

// CPP Program to print Leibniz Harmonic Triangle
#include <bits/stdc++.h>
using namespace std;
// Function to print Leibniz Harmonic Triangle
void printLHT(int n, vector<vector<int>> L){
    for (int i = 1; i <= n; i++){
        for (int j = 1; j <= i; j++)
            cout << "1/" << i * L[i - 1][j - 1] << " ";
        cout << endl;
    }
}
// Function to generate Leibniz Harmonic Triangle
void LHT(int n, vector<vector<int>> &L){
    for (int i = 0; i <= n; i++){
        for (int j = 0; j <= min(i, n); j++){
            if (j == 0 || j == i)
                L[i][j] = 1;
            // Generate the value using previously stored values
            else
                L[i][j] = L[i - 1][j - 1] + L[i - 1][j];
        }
    }
    // print Leibniz Harmonic Triangle
    printLHT(n,L);
}
// Main function
int main(){
    int n = 5;
    // 2D vector to store the Leibniz Harmonic Triangle
    vector<vector<int>> L(n + 1, vector<int>(n + 1, 0));
    LHT(n, L);
    return 0;
}

输出

1/1 
1/2 1/2 
1/3 1/6 1/3 
1/4 1/12 1/12 1/4 
1/5 1/20 1/30 1/20 1/5

时间和空间复杂度分析

时间复杂度:O(n2)

该程序的时间复杂度是O(n2),其中n是Leibniz Harmonic Triangle的行数。这是因为程序通过计算每个条目作为前两个条目之和来生成三角形,而三角形中有n2个条目。

空间复杂度:O(n2)

该程序的空间复杂度也是O(n2),因为它将整个三角形存储在大小为(n + 1) * (n + 1)的二维向量中。

结论

在上文中,我们讨论了一种生成Leibniz调和三角形的方法,直到给定行数为止。Leibniz调和三角形是一个有趣的数学概念,类似于帕斯卡三角形。我们讨论了概念、实现、解决方案以及伪代码、算法和C++程序。我们还分析了解决方案的时间和空间复杂度。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程