问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何输出杨辉三角

发布网友 发布时间:2022-04-23 10:04

我来回答

2个回答

热心网友 时间:2023-08-01 13:58

大家知道利用数组数组的方法输出杨辉三角是一件比较容易的事情,在许多的教材上都能够找到,而且计算速度比较快,但是有个缺点就是当输出的阶数比较大的时候,需要占用较多的存储空间。 下面我尝试用利用非数组的方法输出杨辉三角

1. 利用公式

学了高中数学我们就知道有公式(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)表示杨辉三角的第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

热心网友 时间:2023-08-01 13:58

#include <stdio.h>
#include <string.h>
int main(){
int n,a[32],b[32],i,j;

while(scanf("%d",&n)!=EOF)
{
a[1] = a[2] = b[1] = b[2] = 1;
printf("1\n");
for(i = 2; i <= n; i++){
printf("1 ");
for(j = 2; j < i; j++){
b[j] = a[j-1]+a[j];
printf("%d ",b[j]);
}
b[j] = 1;
memcpy(a,b,sizeof(int)*(n+2));
printf("1\n");
}
printf("\n");
printf("继续请输入打印数值,结束请按Ctrl+z,按回车:");
}
return 0;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
mrna转录试剂盒 windows7应用程序损坏或丢失怎么办? 联想windows7怎么恢复不小心删除的应用 Win7电脑图标不见了如何恢复解决Win7电脑图标丢失问题的有效方法_百 ... 美女主播软件有哪些 什么软件看美女直播? 什么视频直播软件可以免费看女神直播? 钣金工业设计 钣金灰本段用途 关于刮胡子的相关问题 fckn是什么意思 中国热爱生命的故事 中心多边形数 请教各位大大有关铁三角ck系列的命名问题。。。 女人问这个CKN什么意思? ckn是什么意思? 交流接触器是否可以保护遥控开关 遥控式开关,真空式开关,漏电保护开关的有关知识 什么电视遥控器保护套比较好?我听说SIKAI电视遥控器保护套很不错,真的吗?? 交流接触器是否可以保护遥控开关? 电视遥控器保护套买什么样的好,大家推荐下 请问tq 2.4G 遥控器如何设置失控保护? 电视遥控器保护套什么牌子好?大家推荐一下 遥控式开关、真空式开关、漏电保护开关的知识 电视遥控器保护套什么牌子好,如何选择电视遥控器保护套品牌? 电视遥控器保护套哪个牌子的好呢,帮帮忙,推荐一下吧 比亚迪秦EV的遥控驾驶的保护模式有什么用? 欧洲有哪些国家组成,欧洲有多少个国家??? 小米的智能遥控车有哪些保护功能? 欧洲有哪几个国家组成 iphone5合约机价钱怎么算 蛇盘兔的意义? 我进不了百度贴吧,帮我把《揭开“宁码输入法”的真面目》复制过来看下。可以吗? 为什么我安装时输入序列号后 他提示不正确?? 杨辉三角 用c语言怎么编程 新手选机ckm500,ckm300,ckn70,cx300ii 行李箱可以带上飞机吗? 几寸的箱子能带上飞机? 行李箱能带上飞机吗 日本薏仁水批号查询? 小行李箱可以带上飞机吗 薏仁水可以美白吗? 薏仁水有了解的吗?敏感肌能不能用? 用薏仁水湿敷完要用洗面奶洗掉吗 听说薏米水敷脸可以美白,不知道是不是真的呢? 北小喵30倍薏仁水安全吗? 娥佩兰薏仁水含有酒精吗? 日本薏仁水有沉淀物还能用吗? 喝薏米水可以美白吗? 娥佩兰 Opera 薏仁水啫喱面霜是面霜吗?