中国古代数学史曾经有代写论文自己光辉灿烂的篇章,而杨辉三角的发现就是十分精彩的一页。杨辉三角是中国古代数学家贾宪在公元11世纪发现,并被南宋数学家杨辉在他的书中所引述,才使我们今天得以了解贾宪在数学上的重大贡献。杨辉三角是一个由数字排列成的三角形数表.一般形式如下:
1
1 1
1 2 1
1 3 3 1
....
..
杨辉三角,我相信大家都知道。其实在高中数列中应该就用详细介绍了。在高中数学中如果用A(m,n)表示杨辉三角中的第m行第n列的元素,那么表示杨辉三角的表达式如文件1.png
那么在这里我想用我们学过的队列来实现这个获得过程
其基本算法如下:
假设n行
当n=1时将1入队
当n>=2时当生成第n行第j个时
如果j=1时,将1入队
如果j=n时,将1入队,并将队列第一个出对
当1<j<n时,将队列第一个出对记录其值并和此时队列第一个元素的和入队
其图示如文件2.png
首先得实现MyQuen类,自己定义的队列MyQuen.h
#pragma once//这是visual studio 2010中只编译一次的语句
//相当于visual C++ 6.0中 #ifndef ...
// #define ...
// #endif
#include<iostream>
using namespace std;
const int Maxsize = 30;
template<class Elem>
class MyQuen
{
public:
MyQuen();//构造空队列
~MyQuen();
void AddElem(Elem e);//元素e入队列
void DeleElem(Elem &e);//队首元素出队,并用e保存
bool IsEmpty();//是否为空队,是则返回true,否则返回false
bool IsFull();//是否为满队,是则返回true,否则返回false
Elem GetFrontVal();//返回队首元素的值
private:
Elem Array[Maxsize];//存储队列元素,采用数组
int front;//队首
int rear;//队尾
};
template<class Elem>
MyQuen<Elem>::MyQuen()
{
front = 0;
rear = 0;
}
template<class Elem>
MyQuen<Elem>::~MyQuen()
{
}
template<class Elem>
void MyQuen<Elem>::AddElem(Elem e)
{
if(!IsFull())
{
Array[rear++] = e;
if(rear == Maxsize)
{
rear = 0;
}
}
else
{
cerr<<"队列已满"<<endl;
exit(1);
}
}
template<class Elem>
void MyQuen<Elem>::DeleElem(Elem &e)
{
if(!IsEmpty())
{
e = Array[front++];
if(front == Maxsize)
{
front = 0;
}
}
else
{
cerr<<"队列已空"<<endl;
exit(1);
}
}
template<class Elem>
bool MyQuen<Elem>::IsFull()
{
return !((rear-front+Maxsize+1)%Maxsize);
}
template<class Elem>
bool MyQuen<Elem>::IsEmpty()
{
return front == rear;
}
template<class Elem>
Elem MyQuen<Elem>::GetFrontVal()
{
return Array[front];
}
然后就是实现杨辉三角的函数
void YanghuiTri(int num)//num表示要显示的行数
{
MyQuen<int> mq;
int x;
for(int i = 0;i <= num;i++)//表示行
{
for(int j = 0;j <= i;j++)//表示列
{
if(j == 0)
{
mq.AddElem(1);//第一个元素将1加入队列
}
else if(j == i)
{
mq.AddElem(1);//每行最后一个将1入队列
mq.DeleElem(x);//将上一行最后一个出队
cout<<x<<" ";
cout<<"第"<<i<<"行"<<endl;
}
else
{
mq.DeleElem(x);//出队上一行
cout<<x<<" ";
mq.AddElem(x+mq.GetFrontVal());//将此时队首元素+刚出队的元素入队
}
}
}
}
最后就是主函数main.cpp
#include"MyQuen.h"
#include<iostream>
using namespace std;
void YanghuiTri(int num);
int main()
{
int n;
cout<<"请输入要显示的行数:";
cin>>n;
YanghuiTri(n);
return 0;
}
运行结果如文件3.png
该列子只能显示杨辉三角的前27行,这是由于数组开辟的内存有限所致。这个只需修改MyQuen.h中的Maxsize的值
- 大小: 7.6 KB
- 大小: 16 KB
- 大小: 107.1 KB
分享到:
相关推荐
该C程序使用循环队列实现了N行杨辉三角的输出,实现简单。 使用VC进行编译即可。
用循环队列实现杨辉三角的输出。通过该程序可以让你对循环队列有一定的理解。
queue.h头文件:循环队列的实现,操作包括初始化队列、入队、检查是否为空、出队、检查是否为满。源.cpp:利用两个队列打印出杨辉三角。
循环队列生成杨辉三角 C语言源代码 能执行
主要的功能:1)循环队列的初始化 2)求循环队列的长度 3)循环队列的插入删除操作 4) 判断循环队列是否为空,是否已经满了 5)遍历循环队列 杨辉三角形
循环队列的相关应用,利用循环队列打印杨辉三角形
用队列实现杨辉三角 template class SeqQueue //循环队列的类定义 { public: SeqQueue(){ maxSize=50; element=new T[maxSize]; front=0; rear=0; } ~SeqQueue(){delete[] element;} //析构函数 bool EnQueue...
利用循环队列打印杨辉三角形,C语言描述,VC环境下编译通过,运行正确。
N = [1] n=eval(input("请输入行数:")) for i in range(n): L = N.copy() for j in range(len(L)): temp = str(L[j]) L[j] = temp l = ' '.join(L).center(2*n+1) print(l) ...
利用队列打印杨辉三角
(1)始化一个空在循环队列 (2)循环队列入队操作 (3)循环队列出队操作 (4)取出头指针 (5)main 函数
代码由C++程序设计语言编写,包含栈和队列的基本操作(栈:出、入、取、判空等|队列:出、入、取、打印队列、判空等),并展示了三个具体的使用例子,包括用栈求进制转换和用队列打印杨辉三角形,以及用栈计算后缀...
主要介绍了基于Java实现杨辉三角 LeetCode Pascal's Triangle的相关资料,需要的朋友可以参考下
软 件 学 院 上 机 实 验 报 告 课程名称: 数据结构 实验项目: 队列的应用 实 验 室... 利用循环队列实现杨辉三角的输出 " "(二).步骤 " "1.//---------循环队列—队列的顺序存储结构 ----- " "#define MAXSIZE 100
栈,队列,循环队列; 数据结构实验报告,循环队列打印杨辉三角
选做题:使用循环队列,编写一个打印二项式系数表(即杨辉三角)的算法。 1 1 1 2 1 1 3 3 1 1 4 6 4 1 …………………… 系数表中的第 k行有 k+1个数,除了第一个和最后一个数为1之外,其余的...
两种方法实现了队列的操作,链表and容器(容器实现循环队列) 1.实现队列的一种存储结构 2.实现队列的相关操作 3.利用队列的操作特点,借助进队与出队操作完成打印二项式系数的任务(杨辉三角)
Pascal三角形在中国又称为杨辉三角形,它是C语言中常用的一个教学案例,常常用于训练和巩固循环、循环嵌套、二维数组等知识要点。但多数Pascal三角形教学案例中,仅是计算Pascal三角形结果并将其直接输出。训练的...
3、用顺序存储来定义循环队列结构。编程实现,初始化队列、判队列为空、出队列、入队列、求队列头部元素等运算,自己填写主函数。 4、利用队列打印杨辉三角形。杨辉三角形是形如: 1 1 1 1 2 1 1 3 3 1 1 4 ...
分享KMP算法、并查集、二分查找、循环队列、用队列解决电路布线问题、打印杨辉三角、深搜解决迷宫问题的源代码!