[定稿]杨辉三角 用c语言怎么编程
杨辉三角 用c语言怎么编程
#include
main()
{
long i,j,n,k;
scanf("%ld",&n);
for(i=1;i<=n;i++)
{
k=1;
for(j=1;j main(){
int n,i,j;
int a[N+1][2*N+4]; printf("How Many Rows Do You Want:(Number Must Below Or Equal %d)\n",N);
scanf("%d",&n); if(n>N){
printf("What You Input Is Big Than What We Provide!\n");
exit(1);
}
//初始化数组; for(i=1;i<=n;i++){ for(j=-1;j<2*n+2;j++){ a[i][j]=0;
}
}
a[1][n]=1;
//设置杨辉三角的数值; for(i=1;i<=n;i++){ for(j=1;j<2*n;j++){
if(a[i][j]!=0){
a[i+1][j-1]=a[i][j-2]+a[i][j]; a[i+1][j+1]=a[i][j+2]+a[i][j]; }
}
}
//打印杨辉三角; for(i=1;i<=n;i++){ for(j=1;j<2*n;j++){ if(a[i][j]!=0){
printf("%3d",a[i][j]); //打印格式自设,如加“\t”或空格等;
} //主要是为了打印的图像美观;
else{
printf(" ");
}
if(j==(2*n-1)){
printf("\n");
}
}
}
}
#include #include void main()
{
int i,j,k,n;
static int a[50][50]; printf("Input lines\n",&n); scanf("%d",&n); a[1][1]=a[2][1]=a[2][2]=1; for(i=3;i<=n;i++) for(j=1;j<=i;j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=1;i<=n;i++) {for (k=1;k<=n-i;k++) printf(" ");
for(j=1;j<=i;j++) printf("%2d ",a[i][j]); printf("\n");
}
getch();
}
在80字符的屏幕上输出杨辉三角,要求1在中间,形如 1 /*第0行 */
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( 利用公式
学了
高中
高中语文新课程标准高中物理选修31全套教案高中英语研修观课报告高中物理学习方法和技巧高中数学说课稿范文
数学我们就知道有公式(a+b)n =C0n a0bn+…+ Ckn akbn-k…+ Cnn anb0
杨辉三角的每一个元素都可以由公式计算出来Ckn akbn-k,有了这个公式我们就可以很快
写出程序来。
/*************************************************** * 利用公式输出杨辉三角
* 编程:zheng 2004.10.27
* 程序在BCB6.0下编译通过
***************************************************/ #include "stdio.h"
static long factorial(long n)
{//n的阶乘
return n==0||n==1?1:n*factorial(n-1); }//factorial
static long getelem(long n,long k)
{//利用公式计算杨辉三角的第row行,col列的元素 return factorial(n)/(factorial(n-k)*factorial(k)); }//getelem
void output(long n)
{//输出杨辉三角,n为杨辉三角的阶数 int row,col;
for(row=0;row<=n;row++)
{
for(col=0;col<=row;col++)
printf(" %5ld",getelem(row,col));
printf("n");
}//for
}//output
2.利用递归
观察下面的杨辉三角(你也可以用上面的性质,通过数学方法推导出来)
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 10 45 120 210 252 210 120 45 10 1 我们可以得到下面的性质(其实我们用数组的方法也是用这个性质)
1. 边界上的元素都是1
2. 中间的任何一个元素都是他的上一行的两个相邻元素的和
如果我们用f(n,k)
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示杨辉三角的第n行的第k个元素,则上边的性质可以表示成
f(n,k) =1 (k=0或者n=k)
f(n,k) =f(n-1,k-1)+f(n-1,k)
即
Ckn akbn-k = 1 (k=0或者n=k)
Ckn akbn-k = Ckn akbn-k + Ckn akbn-k 有了上面的性质我们很容易写出下面的程序 /*************************************************** * 利用递归输出杨辉三角
* 编程:zheng 2004.10.27
* 程序在BCB6.0下编译通过
***************************************************/ #include "stdio.h"
static long factorial(long n)
{//n的阶乘
return n==0||n==1?1:n*factorial(n-1); }//factorial
static long getelem(long n,long k) {//利用递归计算杨辉三角的第row行,col列的元素 if (k==0||n==k) return 1;
else return getelem(n-1,k-1)+getelem(n-1,k); }//getelem
void output(long n)
{//输出杨辉三角,n为杨辉三角的阶数
int row,col;
for(row=0;row<=n;row++)
{
for(col=0;col<=row;col++)
printf(" %5ld",getelem(row,col));
printf("n");
}//for
}//output
杨辉三角的形状如下(因为百度知道不支持输出空格,故以空格间隔。)
********1********(a+b)^0("^"表示次方)
*******1*1*******(a+b)?
******1*2*1******(a+b)?
*****1*3*3*1*****(a+b)?
****1*4*6*4*1****(a+b)^4
我们知道,杨辉三角形的特点是:每行的第一列为1,最后一列为1。从第三行开始,中间各列等于上一行中前列与本列的和。
可以看出,最后一列的列数正好等于行数(第n行有n个数)。 我们首先就想到,使用一个二重循环就可解决这个问题,但是其中有个问题需要解决,就是数字的位置。C语言中不能象PASCAL语言那样确定打印的坐标,但可以用空格来间接实现。认真观察一下就会发现,从第二行开始,每行的第一个数都比上一行左移一个位置,也就是说,每行第一个数之前的空格数逐行减去一个数字所占的列数。turbo c 2.0 以字符输出时,每行80个字符,我们把第一行的第一个数(本行就一个数即1)放在第40个字符的位置处,且
规定
关于下班后关闭电源的规定党章中关于入党时间的规定公务员考核规定下载规定办法文件下载宁波关于闷顶的规定
第个数字占4列,第二行的第一个数要向左移8列(因为下一行的第n个数和上一行的第n个数不在同一列,即并不对齐,而是刚好错开一个字符的距离) 代码如下:
#define M 10
num(i,j)
int i,j;
{
if(i==j||j==0)
return(1);
else
return(num(i-1,j-1)+num(i-1,j));
}
main()
{
int n,i,j,k;
clrscr();
printf("输入要打印的行数n:(n<=M)");
scanf("%d",&n);
for(i=0;i>这本书,可以很好帮助你
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
算法!
给你个实例吧: #include main()
{
long i,j,n,k; scanf("%ld",&n); for(i=1;i<=n;i++) {
k=1;
for(j=1;j
本文档为【[定稿]杨辉三角 用c语言怎么编程】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。