
他的意思就是说杨辉三角每一行的数值就是上一行两个元素相加得到的。yh_old就是上一行的元素,yh就是这一行,然后yh(l)=yh_old(l-1)+yh_old(l)就是这意思。
但因为杨辉三角是对称的,所以只要算一半就可以了,所以k2=ceil(k/2)而l=2:k2,也就是yh(l)只算到了k的一半。然后后一半只要用前一半对称过来就可以了,即yh(k2+1:k)=yh(k-k2:-1:1)。
以下是我对程序的改进:
程序是从第3行开始循环的,而前两行则直接定义了。但实际上只要定义第一行就可以了,第二行用下面的循环一样可以做出来。也就是说yh=[1,1]; disp(yh); 这一行可以去掉,然后把 k=3:n 换成k=2:n就可以了。然后if n==1, return; end 这一行也就不需要了,可以去掉。
原程序只算了前一半,后一半用对称实现,实际上完全可以用“每一行的数值就是上一行两个元素的和”这个关系把这一行全部算出来,也不用对称了,而且连循环都不需要。下面就是改进的程序:
function printyh(n)
% 打印杨辉三角形, 本函数没有输出参数
yh=1; disp(yh);
for k=2:n
yh=[yh,0]+[0,yh];
yh(k)=1;
disp(yh);
end
#include <stdioh>
int c(int x,int y);
main()
{
int i,j,n=13;
printf("N=");
while(n>12)
scanf("%d",&n);
for(i=0;i<=n;i++)
{
for(j=0;j<12-i;j++)
printf(" ");
for(j=1;j<i+2;j++)
printf("%6d",c(i,j));
printf("\n");
}
}
int c(int x,int y)
{
int z;
if((y==1)||(y==x+1))return(1);
z=c(x-1,y-1)+c(x-1,y);
return(z);
}
如果只是输出不保存的话,可以这样实现,不写主函数了:
void printyanghui(int n) // 打印n行杨辉三角
{
int i, j;
for(i = 0; i < n ; i++) {
for(j = 0; j < n - i; j ++) printf(" ");
for(j = 0; j <= i; j ++) {
printf("%d ", c(i, j));
printf("\n");
}
}
int c(int i, int j)
{
int m, value;
if(j > (i+1) / 2)
j = i-j;
value = 1;
for(m = 0; m < j; m ++)
value = value (i-m) / (m+1);
return value;
}
public static void main(String[] args) {
textYH yang = new textYH();
yangprintYanghuiTriangle(5);
}
/
生成指定行数的杨辉三角形
@param lines 杨辉三角形的行数
/
public void printYanghuiTriangle(int lines) {
if(lines < 1) {
throw new IllegalArgumentException("lines must be great than 0");
}
if(lines > 30) {
throw new IllegalArgumentException("lines is too big");
}
int[] line = new int[lines];
int maxLen = getMaxLen(lines);
for(int i = 0; i < lines; i++) {
line[0] = line[i] = 1;
for(int j = 1, k = i / 2, pre = line[0]; j <= k; j++) {
int cur = line[j];
line[i - j] = line[j] += pre;
pre = cur;
}
printLine(line, i + 1, maxLen);
}
}
/
根据指定行数的杨辉三角形,计算其中最大数字的长度
@param lines 杨辉三角形的行数
@return 最大数字的长度
/
private int getMaxLen(int lines) {
int k = lines / 2;
long maxNum = factorial(k + 1, lines - 1) / factorial(1, lines - 1 - k);
return getLength(maxNum);
}
/
阶乘计算
@param start 阶乘计算的起始数字
@param num 阶乘计算的终止数字
@return 阶乘计算结果
/
private long factorial(int start, int num) {
long result = start > 0 start : 1L;
while(num > start) {
result = num--;
}
return result;
}
/
根据指定数字计算数字的长度
@param num 数字
@return 数字的长度
/
private int getLength(long num) {
int len = 0;
while(num > 0L) {
num /= 10L;
len++;
}
return len;
}
private void printLine(int[] yanghui, int line, int width) {
printSpaces((yanghuilength - line) width);
for(int i = 0; i < line; i++) {
if(i > 0) {
printSpaces(width);
}
printSpaces(width - getLength(yanghui[i]));
Systemoutprint(yanghui[i]);
}
Systemoutprintln();
if(width > 1) {
Systemoutprintln();
}
}
private void printSpaces(int spaceCount) {
for(int i = 0; i < spaceCount; i++) {
Systemoutprint(" ");
}
}
C++和C基本上一个道理
看这个能用么?
#include <iostream>
#include <iomanip>
using namespace std;
void init(int a[][10]);
void print(int a[][10]);
int main()
{
int a[10][10];
init(a);
print(a);
return 0;
}
void init(int a[][10])
{
int i,j;
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
if((j==0)||(j==i))
{
a[i][j]=1;
continue;
}
else
a[i][j]=0;
if(i>0) a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
}
void print(int a[][10])
{
int i,j,n=0;
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
cout<<setw(4)<<a[i][j];
n++;
if((n%10)==0) cout<<endl;
}
}
}
===================================================================
楼主是需要用C语言来编写程序么?
按照楼主的题目,以下是输出5行杨辉三角的程序代码
#include<stdioh>
#define M 256
#define N 256
#define X 10/用于控制输出行数/
void PascalTriangle(void)
{
int a[M][N],i,j;
int m;/用于控制输出格式/
for(i=1;i<=X;i++)
for(j=1;j<=i;j++)
if(i==j||j==1) a[i][j]=1;/给两条斜边赋值1/
else a[i][j]=a[i-1][j-1]+a[i-1][j];/给非斜边数字赋值其肩上两数之和/
printf(
#include <stdioh>
main()
{
int i,j,a[10][10]; /10行10列的杨辉三角/
for(i=0;i<10;i++) /先赋值两边/
{
a[i][0]=1;
a[i][i]=1;
}
for(i=2;i<10;i++) / 计算中间的数值 /
for(j=1;j<i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=0;i<10;i++) / 输出部分 /
{
for(j=0;j<i+1;j++)
printf("%d ",a[i][j]);
printf("\n");
}
}
以上就是关于用matlab编写杨辉三角怎么编写程序呢全部的内容,包括:用matlab编写杨辉三角怎么编写程序呢、编写程序打印数出下图所示的杨辉三角形,要求打印出n行,n值由键盘输入。、编写程序 在屏幕上输出杨辉三角 c语言 循环结构等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)