C++ 帕斯卡三角形(Pascal’s Triangle)

        帕斯卡三角形是二项式系数的三角形阵列。编写一个函数,以整数值N作为输入,并打印帕斯卡三角形的前N​​行。

例子:

下图显示了 N=6 的帕斯卡三角形 

使用二项式系数的帕斯卡三角形:
        每行的条目数等于行号。例如,第一行有“1 ”,第二行有“ 1 1 ”,第三行有“1 2 1 ”,等等。一行中的每个条目都是二项式系数的值。行号 line 中第 i 个条目的值为C(line, i)。可以使用以下公式计算该值。

C(line, i) = line! / ( (line-i)! * i! )

算法:

    对帕斯卡三角形的每一行(即 1 到N )运行一个循环。
        对于每一行,对该行的每个元素运行内部循环。
            使用方法中提到的公式计算元素的二项式系数。
            
下面是上述方法的实现:

//  C++ code for Pascal's Triangle
#include <iostream>
using namespace std;
 
 
int binomialCoeff(int n, int k);
 
// Function to print first
// n lines of Pascal's
// Triangle
void printPascal(int n)
{
    // Iterate through every line and
    // print entries in it
    for (int line = 0; line < n; line++) {
        // Every line has number of
        // integers equal to line
        // number
        for (int i = 0; i <= line; i++)
            cout << " " << binomialCoeff(line, i);
        cout << "\n";
    }
}
 

// for details of this function

//https://blog.csdn.net/hefeng_aspnet/article/details/139958642
int binomialCoeff(int n, int k)
{
    int res = 1;
    if (k > n - k)
        k = n - k;
    for (int i = 0; i < k; ++i) {
        res *= (n - i);
        res /= (i + 1);
    }
 
    return res;
}
 
// Driver program
int main()
{
    int n = 7;
    printPascal(n);
    return 0;
}
 
// This code is contributed by shivanisinghss2110

输出:


 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

时间复杂度: O(N^3),其中 N 是要打印的行数
辅助空间: O(1)

使用动态规划的帕斯卡三角形:
        如果我们仔细观察三角形,我们会发现每个条目都是其上方两个值的总和。因此,使用动态规划,我们可以创建一个二维数组来存储先前生成的值。为了在一行中生成一个值,我们可以使用数组中先前存储的值。 

案例:

if line == 0 or line == i
        arr[line][i] =1
else:
        arr[line][i] = arr[line-1][i-1] + arr[line-1][i]

下面是上述方法的实现:

// C++ program for Pascal’s Triangle
// A O(n^2) time and O(n^2) extra space 
// method for Pascal's Triangle
#include <bits/stdc++.h>
using namespace std;
 
void printPascal(int n)
{
     
    // An auxiliary array to store 
    // generated pascal triangle values
    int arr[n][n]; 
 
    // Iterate through every line and 
    // print integer(s) in it
    for (int line = 0; line < n; line++)
    {
        // Every line has number of integers 
        // equal to line number
        for (int i = 0; i <= line; i++)
        {
        // First and last values in every row are 1
        if (line == i || i == 0)
            arr[line][i] = 1;
           
        // Other values are sum of values just 
        // above and left of above
        else
            arr[line][i] = arr[line - 1][i - 1] + 
                            arr[line - 1][i];
        cout << arr[line][i] << " ";
        }
        cout << "\n";
    }
}
 
// Driver code
int main()
{
    int n = 5;
    printPascal(n);
    return 0;
}
 
// This code is Contributed by Code_Mech.

输出:


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

时间复杂度:O(N^2)
辅助空间: O(N^2)

注意:此方法可以优化为使用 O(n) 额外空间,因为我们只需要前一行的值。因此,我们可以创建一个大小为 n 的辅助数组并覆盖值。以下是另一种仅使用 O(1) 额外空间的方法。

使用二项式系数的帕斯卡三角形(空间优化):
        该方法基于使用二项式系数的方法。我们知道行号 line 中的第 i 个条目是二项式系数 C(line, i) ,并且所有行都以值 1 开头。这个想法是使用C(line, i-1)计算C(line, i ) 。它可以在 O(1) 时间内计算出来。

C(line, i) = line! / ( (line-i)! * i! )
C(line, i-1) = line! / ( (line – i + 1)! * (i-1)! )

我们可以从以上两个表达式得出以下表达式。

C(line, i) = C(line, i-1) * (line – i + 1) / i

因此,可以在 O(1) 时间内通过 C(line, i-1) 计算出 C(line, i)

以下是该方法的实现:

// C++ program for Pascal’s Triangle
// A O(n^2) time and O(1) extra space
// function for Pascal's Triangle
#include <bits/stdc++.h>
 
using namespace std;
void printPascal(int n)
{
 
    for (int line = 1; line <= n; line++) {
        int C = 1; // used to represent C(line, i)
        for (int i = 1; i <= line; i++) {
 
            // The first value in a line is always 1
            cout << C << " ";
            C = C * (line - i) / i;
        }
        cout << "\n";
    }
}
 
// Driver code
int main()
{
    int n = 5;
    printPascal(n);
    return 0;
}
 
// This code is contributed by Code_Mech

输出:


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

时间复杂度: O(n 2 )
辅助空间: O(1)

面试中可能会问到的问题变体:

1、找到如上所示的整个帕斯卡三角形。

2、在 O(n) 时间内给定行号和列号,仅找到帕斯卡三角形的一个元素。

3、在 O(n) 时间内,给定行号,找到帕斯卡三角形的特定行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3225355.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

600Kg大载重起飞重量多旋翼无人机技术详解

600Kg大载重起飞重量的多旋翼无人机是一种高性能的无人驾驶旋翼飞行器&#xff0c;具有出色的载重能力和稳定的飞行特性。该无人机采用先进的飞行控制系统和高效的动力系统&#xff0c;能够满足各种复杂任务的需求&#xff0c;广泛应用于物资运输、应急救援、森林防火等领域。 …

第一章(下)——计算机的性能指标

&#x1f308;个人主页&#xff1a;小新_- &#x1f388;个人座右铭&#xff1a;“成功者不是从不失败的人&#xff0c;而是从不放弃的人&#xff01;”&#x1f388; &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f3c6;所属专栏&#xff1…

vue实现预览编辑ppt、word、pdf、excel、等功能的解决方案(内网-前端)

在Vue中实现预览和编辑PPT、Word、PDF、Excel等文件的功能&#xff0c;尤其是在内网环境下且主要侧重于前端&#xff0c;我们需要明确的是&#xff0c;直接在前端编辑这些格式的文件&#xff08;特别是PPT和Word&#xff09;是非常复杂且通常不推荐的&#xff0c;因为这些格式涉…

智能汽车网络安全笔记

汽车五大域 动力底盘、车身控制、智能座舱、智能网联和高级辅助驾驶五大域 国外汽车安全法规标准 汽车网络安全管理体系&#xff08;CSMS&#xff09; CSMS指的是管理汽车的网络威胁和风险&#xff0c;并保护车辆免受网络攻击的组织过程和管理系统 安全验证和安全测试 8…

极狐GitLab亮相世界人工智能大会,开启开源大模型赋能软件研发新时代

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab &#xff1a;https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署…

1.电阻(常见元器件及电路基础知识)

一.电阻器 1.电阻值与精度 差不多这样一个大小的本子&#xff0c;一般入门建议买0603的电容和电阻本&#xff0c;然后常用的值就单独拎出来&#xff0c;放元器件盒子 总体上来说这些电阻阻值都是大差不差的&#xff0c;精度也无非 更小&#xff0c;1%&#xff0c;5%&#xff0…

LabVIEW机器视觉技术在产品质量检测中有哪些应用实例

LabVIEW的机器视觉技术在产品质量检测中有广泛的应用&#xff0c;通过图像采集、处理和分析&#xff0c;实现对产品缺陷的自动检测、尺寸测量和定位校准&#xff0c;提高生产效率和产品质量。 1. 电子元器件质量检测 在电子制造业中&#xff0c;电子元器件的质量检测是确保产品…

Leedcode刷题——7 滑动窗口 双指针

注&#xff1a;以下代码均为c 1. 两数之和2&#xff08;输入有序数组&#xff09; // 法1&#xff1a;暴力 vector<int> twoSum1(vector<int>& numbers, int target) {vector<int> ans(2);int n numbers.size();for(int i 0; i < n-1; i){if(i ! 0…

【C++报错已解决】Invalid Conversion from ‘const char*’ to ‘char*’

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 引言 ❓ 一、问题描述 &#x1f469;‍&#x1f52c;1.1 报错示例 &#x1f3c6;1.2 报错分析 &#x1f4da;1.3 解决…

英福康INFICON FabGuard传感器集成与分析系统PPT

英福康INFICON FabGuard传感器集成与分析系统PPT

移动互联安全

什么是移动互联 从狭义的角度来说&#xff0c;移动互联网是一个以宽带IP为技术核心&#xff0c;可同时提供语音、传真、图像、多媒体等高品质电信服务的新一代开放的电信基础网络。 从广义的角度来说&#xff0c;移动互联网是指将互联网提供的技术、平台、应用以及商业模式&…

045基于SSM+Jsp的固定资产管理系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

Claude artifacts的平替:deepseek和豆包Marscode的web预览

Claude Artifacts 是由 Anthropic 开发的先进 AI 模型 Claude 3 生成的输出。这些 Artifacts 可以是文本、图像、数据可视化&#xff0c;甚至是更复杂的输出&#xff0c;如交互式内容和自动化报告。此外&#xff0c;Artifacts 还可以是预构建的资源或模板&#xff0c;旨在简化各…

深度学习组件优化器简介--AI(七)

深度学习网络组件介绍 网络组件优化器优化器--SGD优化器--Adam 网络组件 前文介绍的组件如下&#xff1a; 优化器 释义&#xff1a; 损失函数计算出预测值与真实值之间的差距时&#xff0c;有优化器根据一定的策略去调整原有模型的权重&#xff0c;这个调整的策略可以理解成…

安装python2

参考&#xff1a; https://www.cnblogs.com/linjiangplus/p/13948593.html https://www.python.org/downloads/release/python-2718/

【系统架构设计师】九、软件工程(面向对象方法|逆向工程)

目录 六、面向对象方法 6.1 基本概念 6.2 面向对象的分析 6.2.1 用例关系 6.2.2 类之间的关系 6.3 面向对象的设计 6.4 面向对象设计原则与设计模式 6.5 面向对象软件的测试 七、逆向工程 历年真题练习 六、面向对象方法 面向对象的分析方法 (Object-Oriented Analys…

Blackbox AI : 全新的人工智能编码助手 您的高效AI开发全能助手

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引入 提起AI 智能编码助手&#xff0c;相信到了如今大家都不陌生。其对我们开发的代码时的效率有显著的提升&#xff0c;可以说…

BouncyCastleProvider 对 X.509 证书的生成

文章目录 前言BouncyCastleProvider 对 X.509 证书的生成1. demo 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实在白嫖的话&#xf…

基于Java中的SSM框架实现水稻朔源信息系统项目【项目源码】

基于Java中的SSM框架实现水稻朔源信息系统演示 SSM框架 SSM框架是基于Spring、SpringMVC以及Mybatis实现的针对JAVA WEB端应用的开发框架&#xff0c;通过SSM框架结构可以实现以上三种框架的优点集合&#xff0c;从而实现更加高效便捷的系统开发和呈现。该框架结构通过Spring框…

路径规划 | 基于蚁群算法的三维无人机航迹规划(Matlab)

目录 效果一览基本介绍程序设计参考文献 效果一览 基本介绍 基于蚁群算法的三维无人机航迹规划&#xff08;Matlab&#xff09;。 蚁群算法&#xff08;Ant Colony Optimization&#xff0c;ACO&#xff09;是一种模拟蚂蚁觅食行为的启发式算法。该算法通过模拟蚂蚁在寻找食物时…