当前位置:文档之家› 显示杨辉三角实验报告

显示杨辉三角实验报告

显示杨辉三角实验报告
姓名:许严班级:计122 学号:1213023050
1.问题描述
杨辉三角如图2.4.3所示,其特点是两个腰上数值是1,其他位置上的每一个整数都是它的上一行相邻两个整数之和。

问题是:对于指定的最大行数rmax,要求从第一行到第rmax逐行显示杨辉三角形的所有元素。

2.基本要求
⑴设计输出形式,尽量反映杨辉三角的特点。

⑵设计计算杨辉三角形各行数值的方法。

⑶输入:rmax从键盘输入。

⑷输出:屏幕输出杨辉三角形.
3.实现提示
⑴存储设计
计算杨辉三角形第i行时,如果在第i-1行两侧各添加一个0,则第i行的第j个元素等于第i-1行的第j-1个元素与第j个元素的和。

计算如图2.4.4所示。

第i行计算完,第i-1行的数据就没有用了,依据第i行数据可计算第i+1行的数据。

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

图2.4.3 杨辉三角形
从上述计算中不难看出,第i行的元素从左往右依次可被求得,求解过程中也是从左往右依次使用地i-1行的数据,显然,具有先入先出的特点。

所以,可借助一个队列存放计算过程中所需的数据,如图2.4.5所示。

但随着航数的增加,队列会很长。

所以,可以设置一循环队列,队长不少于rmax+2,边计算边出队。

(2)算法设计
计算各行元素的算法步骤如下。

Step1:队列初始化,0、1入队。

队头ftont指向0处,队尾指向1后。

Step2:i从1到rmax,循环执行下列操作,求第i行数据。

2.1 0入队。

2.2 从队首起直到队尾,每出队两元素,求和后入队。

输出时注意0不输出。

(3)程序设计
#include <iostream>
using namespace std;
#include <iomanip>
int Fd(int x, int y)
{
int t = 1;
int k = 1;
for(int i = y; i > x ; i--)
{
t = t * i;
t = t / k;
k++;
}
return t;
}
int main()
{
int nsize;
cout<<"请输入大小"<<endl;
cout<<"提示:按Ctrl+Z两次退出!"<<endl; while(cin>>nsize)
{
for(int i = 0; i <= nsize; i++)
{
for(int k = 0 ; k <= nsize; k++)
{
if(k > i)
{
cout<<" ";
}
}
for(int j = 0 ; j <= i; j++)
{
cout<<setw(3)<<Fd(j,i)<<" ";
}
cout<<endl;
}
cout<<"请输入大小"<<endl;
}
return 0;
}
4.测试与运行
给出行数,从运行结果验证程序设计是否正确。

运行截图:
5.实验体会。

相关主题