c++杨辉三角形程序,java编写杨辉三角形程序
大家好,今天给各位分享c++杨辉三角形程序的一些知识,其中也会对java编写杨辉三角形程序进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!
杨辉三角的在编程中实现
杨辉三角在编程实现中较为容易。最常见的算法便是用上一行递推计算;也有运用和组合的对应关系而使用阶乘计算的,然而后者速度较慢且阶乘容易溢出。编程的输出大多相类,此处并不过多添加截图。
C、C++、C#、Java语言之间的语法也大多相类,因此这里也不会将每一种算法都在这些语言中各实现一遍。要在这些语言的版本间修改,实际上只需注意一些简单的语法和函数名称的改变,如 C的 int yh[M][M]应改写为 Java的 int[][] yh= new int[M][M]、C#的 int[,] yh=new int[M,M];C printf应使用 Java的 System.out.print、C#的 Console.Write、C++中更智能的 cout来替换。以下的代码均用标准 C语言写成,可以被包括 MSVC(含 VC6)、GCC的多种 C编译器编译。
这个算法使用只行列位置和左侧的数值算出数值:/*yh-rt1.c-时间和空间最优算法*/#include<stdio.h>#include<stdlib.h>intmain(){ints=1,h;//数值和高度inti,j;//循环计数scanf(%d,&h);//输入层数printf(1
);//输出第一个1for(i=2;i<=h;s=1,i++)//行数i从2到层高{printf(1);//第一个1for(j=1;j<=i-2;j++)//列位置j绕过第一个直接开始循环//printf(%d,(s=(i-j)/j*s));printf(%d,(s=(i-j)*s/j));printf(1
);//最后一个1,换行}getchar();//暂停等待return0;}
默认求直角三角形,可通过注释的开关或使用编译器的-D定义开关调节等腰三角形和菱形输出。如果觉得复杂,可按照 define使用的情况剔除因不符合 ifdef条件从而未启用的代码之后阅读。
这个算法创建了一个二维数组,并且通过上一行的数值求当前行。在反过来再次打印时,这个程序会使用以前算好的值,从而节省了重复迭代的时间。/*yh-2d.c-二维数组迭代*/#include<stdio.h>#defineM10//行数//#definePYRAMID//金字塔,会额外填充空格//#defineREVERSE//反向再来一次,得到菱形intmain(void){inta[M][M],i,j;//二维数组和循环变量,a[行][列]for(i=0;i<M;i++)//每一行{#ifdefPYRAMIDfor(j=0;j<=M-i;j++)printf();#endif//填充结束for(j=0;j<=i;j++)//赋值打印printf(%4d,(a[i][j]=(i==j||j==0)?1://首尾置1a[i-1][j]+a[i-1][j-1]));//使用上一行计算printf(
);}#ifdefREVERSEfor(i=M-2;i>=0;i--){#ifdefPYRAMIDfor(j=0;j<=M-i;j++)printf();#endif//填充结束for(j=0;j<=i;j++)printf(%4d,a[i][j]);//直接使用以前求得的值printf(
);}#endif//菱形结束getchar();//暂停等待}这一个使用大数组写成,风格更接近教科书上的 VC6代码。/*yh-rt3.c-较为暴力的大数组*/#include<stdio.h>#includestring.hintmain(){inta[10000];//容器,由n*(n+1)/2<=10000可知,n<=141intb,CR,i;//b为当前行数,CR为要求显示的行数,i为循环数printf(请输入要显示的行数(3~141):);scanf(%d,&CR);YHSJ(CR);a[1]=a[2]=1;//前两行数值少且全为1,故直接输出printf(%d
,a[1]);printf(%d%d
,a[1],a[2]);for(b=3;b<=CR;b++)//从第三行开始判断{for(i=b;i>=2;i--)//从倒数第一个数开始加a[i]=a[i]+a[i-1];//杨辉三角的规律,没有值的数组默认为0for(i=1;i<=b;i++)//显示循环printf(%d,a[i]);printf(
);//换行}return0;}这个版本使用队列的方式输出。#include<stdio.h>#include<stdlib.h>#defineEMPTY1#defineOFLOW2#defineINVAL3#defineMAX_Q100typedefintDataType;//数据类型选择typedefstruct{DataTypeelem[MAX_Q];intfront,rear;}LinkQ;//队列及检查宏#defineInitQ(Q)LinkQQ;Q.front=Q.rear=-1;#define_EQ(Q,e)Q.elem[(Q.rear=(Q.rear+1)%MAX_Q)]=e#defineEnQ(Q,e)if((Q.rear+1)%MAX_Q==Q.front)Exit(OFLOW,Overflow);_EQ(Q,e)#defineDeQ(Q,e)e=Q.elem[(Q.front=(Q.front+1)%MAX_Q)]#defineFront(Q)Q.elem[(Q.front+1)%MAX_Q]//退出intExit(interr,charmsg[]){puts(msg);exit(err);returnerr;}intmain(void){intn=1,i,j,k,t;InitQ(Q);printf(pleaseenteranumber:);scanf(%d,&n);if(n<=0){printf(ERROR!
);exit(INVAL);}for(i=0;i<n;i++)printf();puts(1);EnQ(Q,1);EnQ(Q,1);for(i=1;i<n;i++){for(k=0;k<n-i;k++)printf();EnQ(Q,1);for(j=0;j<i;j++){DeQ(Q,t);printf(%3d,t);EnQ(Q,t+Front(Q));}EnQ(Q,1);DeQ(Q,t);printf(%d
,t);}return0;}来自易语言自带的例子。
以下为全文。.版本2.程序集启动窗口程序集.程序集变量帕斯卡三角阶数,整数型,,,帕斯卡三角行数.程序集变量帕斯卡三角,文本型,,,形成的帕斯卡三角.子程序__启动窗口_创建完毕'使用算法:递归调用'问题:求帕斯卡(杨辉)三角'问题取N阶的帕斯卡(杨辉)三角并显示'问题分析:'运用递归的方法取N层帕斯卡三角,并显示。三角形边界上的数都是1,内部的每个数是位于它上面的两个数之和。'假设f(row,col)表示杨辉三角的第row行的第col个元素,那么:f(row,col)=1(col=1或者row=col),也就是递归的停止条件。f(row,col)=f(row-1,col-1)+f(row-1,col),也就是上一行的两个相邻元素的和。递归调用求解。'备注:.子程序_计算图形按钮_被单击.局部变量行数,整数型,,,帕斯卡三角行数.局部变量列数,整数型,,,帕斯卡三角列数.局部变量询问返回,整数型,,,信息框返回的结果编辑框2.内容=“”帕斯卡三角=“”'判断输入的值.判断开始(编辑框1.内容=“”)信息框(“输入错误!”,0,)'当数值过大时,给出提示.判断(到数值(编辑框1.内容)>20)询问返回=信息框(“您输入的数值过大,处理数据时程序将会有一段时间无响应,是否继续?”,#是否钮+#询问图标,“请问:”).如果真(询问返回=#是钮)'如果确定,调用求帕斯卡三角求帕斯卡三角().如果真结束'数据较小时调用求帕斯卡三角.判断(编辑框1.内容≠“”且到数值(编辑框1.内容)≤20)求帕斯卡三角().默认.判断结束.子程序求帕斯卡三角.局部变量行数,整数型,,,帕斯卡三角行数.局部变量列数,整数型,,,帕斯卡三角列数'要求的帕斯卡三角的总行数帕斯卡三角阶数=到数值(编辑框1.内容)-1.变量循环首(0,帕斯卡三角阶数,1,行数).变量循环首(0,行数,1,列数)'取帕斯卡三角元素放到当前行里帕斯卡三角=帕斯卡三角+到文本(取帕斯卡三角元素(行数+1,列数+1))+“,”.变量循环尾()帕斯卡三角=取文本左边(帕斯卡三角,取文本长度(帕斯卡三角)-1)+#换行符'没层需去尾都好加换行符.变量循环尾()'显示结果编辑框2.内容=帕斯卡三角.子程序取帕斯卡三角元素,整数型,,取帕斯卡三角中元素的子程序.参数行数,整数型,,帕斯卡三角行数.参数列数,整数型,,帕斯卡三角列数.如果(列数=1或行数=列数)'每行的外围两个元素为1返回(1).否则'其余的部分为上一行的(行数-1)和(行数)元素之和返回(取帕斯卡三角元素(行数-1,列数-1)+取帕斯卡三角元素(行数-1,列数)).如果结束#-*-coding:utf-8-*-#!/usr/bin/envpythondefpas_triangles():a=[1]whileTrue:yieldaa=[sum(i)foriinzip([0]+a,a+[0])]if__name__==__main__:g=pas_triangles()forninrange(10):print(next(g))
杨辉三角形
杨辉三角形,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列。
北宋人贾宪约1050年首先使用“贾宪三角”进行高次开方运算。
杨辉,字谦光,南宋时期杭州人。在他1261年所著的《详解九章算法》一书中,辑录了如上所示的三角形数表,称之为“开方作法本源”图,并说明此表引自11世纪中叶(约公元1050年)贾宪的《释锁算术》,并绘画了“古法七乘方图”。故此,杨辉三角又被称为“贾宪三角”。
元朝数学家朱世杰在《四元玉鉴》(1303年)扩充了“贾宪三角”成“古法七乘方图”。
意大利人称之为“塔塔利亚三角形”(Triangolo di Tartaglia)以纪念在16世纪发现一元三次方程解的塔塔利亚。
在欧洲直到1623年以后,法国数学家帕斯卡在13岁时发现了“帕斯卡三角”。
布莱士·帕斯卡的著作Traité du triangle arithmétique(1655年)介绍了这个三角形。帕斯卡搜集了几个关于它的结果,并以此解决一些概率论上的问题,影响面广泛,Pierre Raymond de Montmort(1708年)和亚伯拉罕·棣·美弗(1730年)都用帕斯卡来称呼这个三角形。
近年来国外也逐渐承认这项成果属于中国,所以有些书上称这是“中国三角形”(Chinese triangle)
历史上曾经独立绘制过这种图表的数学家
·贾宪中国北宋 11世纪《释锁算术》
·杨辉中国南宋1261《详解九章算法》记载之功
·朱世杰中国元代 1299《四元玉鉴》级数求和公式
·阿尔·卡西阿拉伯 1427《算术的钥匙》
·阿皮亚纳斯德国 1527
·米歇尔`斯蒂费尔德国 1544《综合算术》二项式展开式系数
·薛贝尔法国 1545
·B·帕斯卡法国 1654《论算术三角形》
其实,中国古代数学家在数学的许多重要领域中处于遥遥领先的地位。中国古代数学史曾经有自己光辉灿烂的篇章,而杨辉三角的发现就是十分精彩的一页。
好了,关于c++杨辉三角形程序和java编写杨辉三角形程序的问题到这里结束啦,希望可以解决您的问题哈!