Alogrithm:巴斯卡三角形

巴斯卡三角形(Pascal's Triangle)是一个由数字排列成的三角形,每一行的数字是由前一行的两个相邻数字相加得到的。巴斯卡三角形的每一行对应着二项式展开式的系数。具体如下图所示:

巴斯卡三角形的性质

  • 第 0 行只有一个数字 1。
  • 第 1 行是 1 1。
  • 第 2 行是 1 2 1。
  • 第 3 行是 1 3 3 1。
  • 第 4 行是 1 4 6 4 1。
  • 以此类推。
规律
三角形中的每个数字是由其上方两个数字之和得来的,边缘的数字始终是 1。

C 语言实现

这里提供两种方式:一种是通过二维数组构建,另一种是通过递推公式计算。
1. 使用二维数组
#include <stdio.h>// 函数用来打印巴斯卡三角形
void printPascal(int n) {// 创建一个二维数组,n 是行数int arr[n][n];// 填充巴斯卡三角形for (int i = 0; i < n; i++) {for (int j = 0; j <= i; j++) {if (j == 0 || j == i) {arr[i][j] = 1;  // 边缘的数字是 1} else {arr[i][j] = arr[i-1][j-1] + arr[i-1][j];  // 其他数字是上方两个数字之和}}}// 打印巴斯卡三角形for (int i = 0; i < n; i++) {for (int j = 0; j <= i; j++) {printf("%d ", arr[i][j]);}printf("\n");}
}int main() {int n;printf("Enter the number of rows for Pascal's Triangle: ");scanf("%d", &n);printf("Pascal's Triangle with %d rows:\n", n);printPascal(n);return 0;
}
示例运行:
Enter the number of rows for Pascal's Triangle: 5
Pascal's Triangle with 5 rows:
1 
1 1 
1 2 1 
1 3 3 1 
1 4 6 4 1 
2. 使用递推公式(组合数)
巴斯卡三角形中的每个数字实际上就是组合数 C(n,k),其中 C(n,k) 是从 n 个元素中选取 k 个元素的组合数,公式为:
我们可以直接用递推公式来计算每个数字。
#include <stdio.h>// 计算组合数 C(n, k)
int combination(int n, int k) {if (k == 0 || k == n) {return 1;} else {return combination(n - 1, k - 1) + combination(n - 1, k);}
}// 打印巴斯卡三角形
void printPascal(int n) {for (int i = 0; i < n; i++) {for (int j = 0; j <= i; j++) {printf("%d ", combination(i, j));  // 打印每个组合数}printf("\n");}
}int main() {int n;printf("Enter the number of rows for Pascal's Triangle: ");scanf("%d", &n);printf("Pascal's Triangle with %d rows:\n", n);printPascal(n);return 0;
}
示例运行:
Enter the number of rows for Pascal's Triangle: 5 Pascal's Triangle with 5 rows: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1

解析

  • 二维数组方法:通过创建一个二维数组 arr[n][n] 来存储每一行的数字,填充时利用巴斯卡三角形的性质:边缘的数字是 1,其他数字是其上方两个数字的和。
  • 组合数方法:通过递归计算组合数来直接打印巴斯卡三角形的每个数字。组合数 C(n,k) 表示从 n 个元素中选择 k 个的不同方式。

选择哪种方法

  • 二维数组方法:适合理解和可视化每一行数据的构建过程。它也比递归方法更高效,因为没有重复计算。对于大规模的巴斯卡三角形,推荐使用二维数组方法来提高效率。
  • 组合数方法:使用递归计算每个元素的值,可能更适合对数学公式有兴趣的人,但由于递归会有重复计算,因此性能不如直接使用数组。

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

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

相关文章

为什么使用3DMAX插件会出现系统崩溃?

使用3DMAX插件时出现系统崩溃&#xff0c;可能涉及多个方面的原因。以下是一些主要的原因及相应的解决方案&#xff1a; 一、插件兼容性问题 版本不兼容&#xff1a; 旧版插件可能无法与最新版本的3DMAX完全兼容&#xff0c;导致系统崩溃。解决方案&#xff1a;更新插件至最新…

【LeetCode刷题之路】64.最小路径和 (动态规划入门)

LeetCode刷题记录 &#x1f310; 我的博客主页&#xff1a;iiiiiankor&#x1f3af; 如果你觉得我的内容对你有帮助&#xff0c;不妨点个赞&#x1f44d;、留个评论✍&#xff0c;或者收藏⭐&#xff0c;让我们一起进步&#xff01;&#x1f4dd; 专栏系列&#xff1a;LeetCode…

【前端学习笔记】Vue2基础

1.介绍 Vue 是一套用来动态构建用户界面的渐进式JavaScript框架 构建用户界面&#xff1a;把数据通过某种办法变成用户界面渐进式&#xff1a;Vue可以自底向上逐层的应用&#xff0c;简单应用只需要一个轻量小巧的核心库&#xff0c;复杂应用可以引入各式各样的Vue插件遵循MV…

【在Linux世界中追寻伟大的One Piece】HTTP cookie

目录 1 -> 引入HTTP cookie 1.1 -> 定义 1.2 -> 工作原理 1.3 -> 分类 1.4 -> 安全性 2 -> 认识cookie 2.1 -> 基本格式 2.2 -> GMT vs UTC 3 -> cookie的生命周期 3.1 -> 安全性考虑 3.2 -> 安全测试cookie 3.2.1 -> 测试co…

Echarts使用平面方法绘制三维立体柱状图表

目录 一、准备工作 1.下载引入ECharts库 2.创建容器 二、绘制基本柱状 三、绘制立体柱状方法一 1.定义立方体形状 2.注册立方体形状 3.配置custom系列 4.设置数据 5.渲染图表 四、绘制立体柱状方法二 1.画前知识 2.计算坐标renderItem 函数 &#xff08;1&#x…

考研信息查询系统|Java|SSM|VUE| 前后端分离

【重要1⃣️】前后端源码万字文档部署文档 【包含内容】 【一】项目提供非常完整的源码注释 【二】相关技术栈文档 【三】源码讲解视频 【其它服务】 【一】可以提供远程部署安装&#xff0c;包扩环境 【二】提供软件相关的安装包 【…

[高阶数据结构八] B+树和索引原理深度解析

1.前言 B树并不常用,就是因为有B树的存在. MySQL的索引底层其实就是使用了B树,但是B树和索引都是在了解了B树之后才深度学习的&#xff0c;如果你对于B树海一无所知的话&#xff0c;请阅读下面这篇文章。 [高阶数据结构三] B-树详解_b-树csdn-CSDN博客 本章重点&#xff1a; …

Gitee配置以及如何将本地项目提交到远程仓库

文章目录 准备远程仓库配置注册新建仓库 配置git 生成ssh&#xff0c;输入以下命令&#xff0c;然后连敲三次回车键配置公钥本地代码上传 准备 1.本地下载git 2.注册远程仓库账号 远程仓库配置 注册 官网&#xff1a;https://gitee.com 完成注册 新建仓库 头像->设置-…

圣桥ERP queryForString.dwr SQL注入漏洞复现

0x01 产品描述: 杭州圣乔科技有限公司主要研发全套工业企业ERP系列软件产品,现在公司已经形成ERP 软件、OA办公管理、等四大系列二十小类软件产品。致力于为政府、教育、医疗卫生、文化事业、公共事业(电、水、气等)、交通、住建、应急、金融、电信运营商、企业等用户提供专…

基于MFC框架用C++做一个记账本

目录 一、前言 二、主要功能和技术点 1.主要功能 2.主要技术点 三、准备工作 1.SQLite数据库操作工具 2.SqLiteCpp第三方库 3.安装office导入Excel需要的接口 3.1具体步骤 四、主界面 1.自定义窗口背景 1.1消息映射 1.2选择背景图片 1.3绘制背景 1.4静态控件透明…

qemu搭建aarch64

qemu工具搭建aarch64系统 下载准备 下载qemu: https://qemu.weilnetz.de/w64/2022/qemu-w64-setup-20220831.exe 下载固件&#xff1a;https://publishing-ie-linaro-org.s3.amazonaws.com/releases/components/kernel/uefi-linaro/16.02/release/qemu64/QEMU_EFI.fd?Signat…

Zookeeper3.6.3集群安装

Zookeeper3.6.3三节点集群安装 为保证集群高可用&#xff0c;Zookeeper 集群的节点数最好是奇数&#xff0c;最少有三个节点&#xff0c;所以这里搭建一个三个节点的集群。(在一个节点模拟三节点&#xff0c;真实的三节点把ip替换一下即可&#xff0c;按照hadoop案件把网络打通…

下一代 RAG 技术来了!微软正式开源 GraphRAG

省流总结 优点&#xff1a;检索准确度高 缺点&#xff1a;单个19w字构建用时4分30s、gpt4 token花费12美元 概述 7 月 2 日&#xff0c;微软开源了 GraphRAG&#xff0c;一种基于图的检索增强生成 (RAG) 方法&#xff0c;可以对私有或以前未见过的数据集进行问答。在 GitHub…

MySQL索引(四):字符串索引

前缀索引 MySQL是支持前缀索引的&#xff0c; 也就是说&#xff0c; 你可以定义字符串的一部分作为索引。 默认地&#xff0c;如果你创建索引的语句不指定前缀长度&#xff0c; 那么索引就会包含整个字符串。 使用前缀索引的优缺点&#xff1a; 1&#xff09;优点&#xff1a…

获取剪切板的图片 -> File -> Base64 -> Blob -> url -> Image,以及它们之间的各种相互转换

&#x1f9d1;‍&#x1f4bb; 写在开头 点赞 收藏 学会&#x1f923;&#x1f923;&#x1f923; 一、获取剪切板的图片&#xff08;拿到 File 对象&#xff09; js粘贴事件paste简单解析及遇到的坑 - 云社区 - 腾讯云 (tencent.com) document.addEventListener(paste, f…

实战八:模拟京东购物流程

问题描述&#xff1a; 从键盘录入5个商品信息&#xff08;1001手机&#xff09;添加到商品列表中&#xff0c;展示商品信息,提示用户选择商品&#xff0c;用户选中的商品添加到购物车中&#xff08;购物车中的商品要逆序)&#xff0c;用户选中的商品不存在需要有相应提示&#…

Selenium安装WebDriver最新Chrome驱动(含116/117/118/119)

目录 1、确认浏览器的版本 2、找到对应的chromedriver版本 3、解压chromedriver文件&#xff0c;放置chrome的安装目录下 4、设置系统属性 5、确认chromedriver是否安装成功及解决方式 1、确认浏览器的版本 在浏览器的地址栏&#xff0c;输入chrome://version/&#x…

攻防世界cat-题解

1.打开题目很想是一个命令执行&#xff0c;但是使用命令之心的语句&#xff0c;无法执行命令&#xff0c;看了wp&#xff0c;是在命令执行的时候&#xff1b;被编码了&#xff0c;我们把url%80使它溢出&#xff0c;把显示出来的代码下载到本地分析 分析代码我们可以知道这个是一…

SSM框架

目录 一. Maven入门和进阶 1.Maven简介和快速入门 (1) Maven介绍 (2) Maven的主要作用理解 ①场景概念 ②依赖管理 ③构建管理 (3)Maven安装和配置 ①软件安装 ②环境变量 ③命令测试 ④配置文件&#xff1a; ⑤idea配置本地maven 2.基于IDEA的Maven工程创建 (1…

AI 名人堂:李飞飞

Fei-Fei Li&#xff08;李飞飞&#xff09;&#xff0c;斯坦福大学计算机科学系教授&#xff0c;斯坦福人工智能实验室前主任&#xff0c;以其在人工智能领域的开创性工作而闻名。 人工智能教育的倡导者 计算机视觉领域的领军人物 ImageNet的创造者 2AGI.NET AI 教程 2025最…