C#杨辉三角形

目录

1.杨辉三角形定义

2.用数组实现10层的杨辉三角形

3.使用List泛型链表集合设计10层的杨辉三角形

(1)代码解释:

(2)算法中求余的作用

4.使用List泛型链表集合设计10层的等腰的杨辉三角形


1.杨辉三角形定义

        杨辉三角是一个由数字排列成的三角形数表,其最本质的特征是它的两条边都是由数字1组成的,而其余的数则等于它上方的两个数之和。

        杨辉三角有两种常用的表示形式。

2.用数组实现10层的杨辉三角形

        程序使用嵌套的for循环创建一个2D数组,并根据行和列索引为其填充适当的值。
        用于生成三角形的算法称为杨辉算法,这是一种使用仅使用上一行的元素计算杨辉三角的元素的高效方法。程序首先将三角形的前两行的所有元素设置为1。对于每后续行,程序将第一个和最后一个元素设置为1,并通过将上一行中上面的两个元素相加来计算剩余元素。 

// 10层的杨辉三角形
namespace _150_3
{internal class Program{private static void Main(string[] args){ArgumentNullException.ThrowIfNull(args);// 向数组中记录杨辉三角形的值int[][] Array_int = new int[10][];          //定义一个10行的二维数组for (int i = 0; i < Array_int.Length; i++)  //遍历行数{Array_int[i] = new int[i + 1];          //定义二维数组的列数for (int j = 0; j < Array_int[i].Length; j++)//遍历二维数组的列数{if (i <= 1)              //如果是数组的前两行{Array_int[i][j] = 1; //将其设置为1continue;}else{if (j == 0 || j == Array_int[i].Length - 1)//如果是行首或行尾Array_int[i][j] = 1;//将其设置为1elseArray_int[i][j] = Array_int[i - 1][j - 1] + Array_int[i - 1][j];//根据杨辉算法进行计算}}}// 输出杨辉三角形for (int i = 0; i < Array_int.Length; i++){for (int j = 0; j < Array_int[i].Length; j++)Console.Write("{0}\t", Array_int[i][j]);Console.WriteLine();}Console.ReadLine();}}
}
//运行结果:
/*
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*/

3.使用List<int>泛型链表集合设计10层的杨辉三角形

// 使用List<int>泛型链表集合设计10层的杨辉三角形
namespace _150
{class Program{static void Main(string[] args){ArgumentNullException.ThrowIfNull(args);int layer = 10;List<List<int>> pam = [];for (int i = 0; i < layer; i++){pam.Add([]);for (int j = 0; j <= i; j++){if (i == 0){pam[i].Add(1);}else if (i == 1){pam[i].Add(j == 0 ? 1 : 1);}else{pam[i].Add(j == 0 || j == i ? 1 : (pam[i - 1][j - 1] + pam[i - 1][j]) % 1000000007);}}}foreach (var row in pam){foreach (var num in row){Console.Write("{0}\t", num);}Console.WriteLine();}}}
}
//运行结果:
/*
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*/

(1)代码解释:

  • 首先定义了一个List<List<int>>泛型链表集合pam,用于存储杨辉三角形的每一层。
  • 然后使用两个嵌套的for循环,分别遍历每一层和每一列,根据新的杨辉三角形规律计算每个位置的数字。
  • 第一行只有一个元素1,第二行有两个元素1和1,从第三行开始的每行首尾元素为1,其余元素等于上一行其正上方相邻2元素和。
  • 最后,使用foreach循环遍历链表集合pam,打印出每个列表中的每个数字,即为10层的杨辉三角形。

(2)算法中求余的作用

//为什么有这个求余?
pam[i].Add(j == 0 || j == i ? 1 : (pam[i - 1][j - 1] + pam[i - 1][j]) % 1000000007);

        这个求余运算% 1000000007是用来避免整数溢出的。

        在计算每个位置的数字时,如果直接进行加法运算,当数字变得非常大时,可能会超过整数的最大值,导致整数溢出。为了避免这个问题,我们使用了一个大数运算的方法,即将每个数字对一个很大的数进行求余运算,这样可以保证结果始终在一个较小的范围内,避免整数溢出。

        这个求余运算的值1000000007是一个质数,选择一个质数作为求余运算的值可以保证运算结果的唯一性和周期性,即对于任意两个不同的正整数a和b,它们对1000000007取余的结果也是不同的,且a和b的和对1000000007取余的结果等于(a + b) % 1000000007,这保证了运算结果的正确性。

4.使用List<int>泛型链表集合设计10层的等腰的杨辉三角形

// 用泛型链表列设计的等腰的杨辉三角形
namespace _150_2
{class Program{static void Main(string[] args){ArgumentNullException.ThrowIfNull(args);int layer = 10;List<List<int>> pam = [];for (int i = 0; i < layer; i++){pam.Add([]);for (int j = 0; j <= i; j++){if (i == 0){pam[i].Add(1);}else if (i == 1){pam[i].Add(j == 0 ? 1 : 1);}else{pam[i].Add(j == 0 || j == i ? 1 : (pam[i - 1][j - 1] + pam[i - 1][j]) % 1000000007);}}}int max_width = 0;foreach (var row in pam){max_width = Math.Max(max_width, row.Count);}for (int i = 0; i < layer; i++){int width = pam[i].Count;int padding = (max_width - width) * 8 / 2;Console.Write(new string(' ', padding));for (int j = 0; j < width; j++){Console.Write(pam[i][j].ToString().PadLeft(8));//每个数字8位}Console.WriteLine();}}}
}
//运行结果:
/*11       11       2       11       3       3       11       4       6       4       11       5      10      10       5       11       6      15      20      15       6       11       7      21      35      35      21       7       11       8      28      56      70      56      28       8       11       9      36      84     126     126      84      36       9       1*/

代码解释:

  • 首先计算出杨辉三角形的最大宽度max_width,即最大行数。
  • 然后在打印每一行时,计算出该行需要填充的空格数padding,即最大宽度减去当前行的宽度,然后除以2(因为左右两侧都需要填充空格)。
  • 使用Console.Write(new string(' ', padding))输出填充的空格。
  • 接着使用嵌套的foreach循环遍历链表集合pam中的每个数字,并使用Console.Write输出每个数字及占位。
  • 最后使用Console.WriteLine()换行,以便开始下一行的输出。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1058:求一元二次方程

【题目描述】 利用公式 求一元二次方程axbxc0的根&#xff0c;其中a不等于0。结果要求精确到小数点后5位。 【输入】 输入一行&#xff0c;包含三个浮点数a,b,c&#xff08;它们之间以一个空格分开&#xff09;&#xff0c;分别表示方程axbxc0的系数。 【输出】 输出一行&…

航顺车规级SoC全新亮相,助推汽车智能化发展

受益于汽车电动化、智能化和网联化的推进&#xff0c;汽车车身域和座舱域MCU市场规模持续扩大。据统计&#xff0c;2021年中国车载芯片MCU市场规模达30.01亿美元&#xff0c;同比增长13.59%&#xff0c;预计2025年市场规模将达42.74亿美元。 在技术要求方面&#xff0c;对…

MyBatisPlus 之四:MP 的乐观锁和逻辑删除、分组、排序、链式的实现步骤

乐观锁 乐观锁是相对悲观锁而言的&#xff0c;乐观锁假设数据一般情况不会造成冲突&#xff0c;所以在数据进行提交更新的时候&#xff0c;才会正式对数据的冲突与否进行检测&#xff0c;如果冲突&#xff0c;则返回给用户异常信息&#xff0c;让用户决定如何去做。 乐观锁适用…

[Qt学习笔记]QT下获取Halcon图形窗口鼠标事件并执行相应操作

目录 1、背景2、参考信息3、目标4、步骤4.1 Halcon库的配置4.2 读取图像&#xff0c;并实现图像自适应窗体控件大小4.3 主要的图形绘制和贴图操作见如下代码&#xff0c;其中重点为全局函数的创建来实现选择Select、拖拽Drag和尺寸Resize事件响应。 5、总结 1、背景 在视觉项目…

3.19作业

1、思维导图 2、模拟面试题 1&#xff09;TCP通信中的三次握手和四次挥手 答&#xff1a;三次握手 客户端向服务器发送连接请求 服务器向客户端回复应答并向客户端发送连接请求 客户端回复服务端&#xff0c;并建立联系 四次挥手 进程a向进程b发送断开连接请求…

华纳云:python怎么对数据集进行归一化处理

在 Python 中对数据集进行归一化处理通常使用数学库(如NumPy)或机器学习库(如scikit-learn)提供的函数。归一化处理是将数据按比例缩放到一个特定的范围&#xff0c;通常是[0, 1]或者[-1, 1]之间&#xff0c;以便更好地适应模型训练或优化算法。以下是使用这些库进行数据集归一…

3.20作业

1、思维导图 2、 1> 创建一个工人信息库&#xff0c;包含工号&#xff08;主键&#xff09;、姓名、年龄、薪资。 2> 添加三条工人信息&#xff08;可以完整信息&#xff0c;也可以非完整信息&#xff09; 3> 修改某一个工人的薪资&#xff08;确定的一个&am…

DeepLearning深度学习入门建议

文章目录 深度学习简介什么是深度学习深度学习的应用 深度学习与传统机器学习的区别数据处理方式模型结构计算资源需求深度学习的应用领域深度学习的优势和挑战优势挑战 深度学习的基础知识1. 什么是深度学习&#xff1f;2. 为什么选择深度学习&#xff1f;3. 深度学习的主要算…

踏“时间”与“空间”前来探寻复杂度的奥妙(Java篇)

本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

校园综合能效平台建设的意义

彭姝麟 Acrelpsl 一 高校用能分析 当前高校用能普遍存在以下点问题&#xff1a; 一是用能需求日益增加&#xff1a;随着高校的快速发展&#xff0c;校园用能人数、用能设备、建筑面积等逐年增加&#xff0c;用能需求也相应攀升。日益增长的能耗需求与节能降耗任务之间的客观矛…

一文读懂什么是序列 (sequence)

sequence 序列 sequence(序列)是一组有顺序的元素的集合 (严格的说&#xff0c;是对象的集合&#xff0c;但鉴于我们还没有引入“对象”概念&#xff0c;暂时说元素) 序列可以包含一个或多个元素&#xff0c;也可以没有任何元素。 我们之前所说的基本数据类型&#xff0c;都…

蓝桥杯练习03个人博客

个人博客 介绍 很多人都有自己的博客&#xff0c;在博客上面用自己的方式去书写文章&#xff0c;用来记录生活&#xff0c;分享技术等。下面是蓝桥云课的博客&#xff0c;但是上面还缺少一些样式&#xff0c;需要大家去完善。 准备 开始答题前&#xff0c;需要先打开本题的…

物业社区人行通道闸如何选择,这6点一定要考虑!

社区是居民的共同家园&#xff0c;一个安全、便捷且和谐的社区环境对于提升居民的生活质量至关重要。人行通道闸不仅仅是一道简单的进出关卡&#xff0c;它是守护社区人员通行安全的坚实屏障&#xff0c;是提升社区管理效率的智能工具&#xff0c;更是增强业主满意度的关键因素…

MATLAB中的cell数组和结构体。

MATLAB中的Cell数组和结构体 MATLAB作为一种高级编程语言和数值计算环境&#xff0c;为用户提供了多种数据结构&#xff0c;以便更灵活、高效地处理数据。其中&#xff0c;cell数组和结构体是两种非常重要的数据结构&#xff0c;它们在MATLAB编程和数据管理中发挥着关键作用。…

C# 部署ICE框架以及用例(VS2019)

使用Windows 10环境&#xff0c;VS2019进行ICE用例开发 用例结构&#xff1a;客户端和服务端 关键技术&#xff1a;集成ICE环境&#xff0c;可以创建ice文件并自动生成对应的cs文件 1.环境安装 ICE Build插件安装。安装以后&#xff0c;就可以在项目中插入ice文件 2.代码实…

放大镜效果

放大镜效果 摘要 利用css和js来实现图片放大效果 HTML <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><titl…

Go——切片

1. 特点 slice并不是数组或数组指针。它通过内部指针和相关属性引用数组片段&#xff0c;以实现变长方案。 切片&#xff1a;切片是数组的一个引用&#xff0c;因此切片是引用类型。但自身是结构体&#xff0c;值拷贝传递。切片的长度可以改变&#xff0c;因此&#xff0c;切片…

MATLAB和Python数值和符号计算可视化物理学气体动能和粒子速度

要点 Python物理学差分数值和符号计算 热动力学计算&#xff1a;统计力学&#xff0c;分子动力学模型 Python寻找弹性物体的运动&#xff0c;LAMMPS 分子动力学模拟器模拟2D气体分子&#xff0c;Python原子模拟绘图&#xff0c;Python数值计算原子平衡性&#xff0c;Python绘制…

Elasticsearch实战:索引阻塞 —— 数据保护的终极武器

文章目录 1、索引阻塞的种类2、什么时候使用阻塞&#xff1f;场景1&#xff1a;进行系统维护场景。场景2&#xff1a;保护数据不被随意更改场景。场景3&#xff1a;优化资源使用的场景。场景4&#xff1a;遵守安全规则场景。 3、添加索引阻塞API4、解除设置 API5、小结6、参考 …

Transformer位置编码(Position Embedding)理解

本文主要介绍4种位置编码&#xff0c;分别是NLP发源的transformer、ViT、Sw-Transformer、MAE的Position Embedding 一、NLP transformer 使用的是1d的绝对位置编码&#xff0c;使用sincos将每个token编码为一个向量【硬编码】 Attention Is All You Need 在语言中&#xff0…