`
Tveiker
  • 浏览: 56027 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

用循环队列获得杨辉三角

阅读更多
  中国古代数学史曾经有代写论文自己光辉灿烂的篇章,而杨辉三角的发现就是十分精彩的一页。杨辉三角是中国古代数学家贾宪在公元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
2
0
分享到:
评论

相关推荐

    循环队列实现杨辉三角

    该C程序使用循环队列实现了N行杨辉三角的输出,实现简单。 使用VC进行编译即可。

    循环队列实现杨辉三角的输出

    用循环队列实现杨辉三角的输出。通过该程序可以让你对循环队列有一定的理解。

    循环队列 杨辉三角

    接下来,我们来看"源.cpp"文件,该文件利用两个循环队列来实现杨辉三角的打印。杨辉三角,又称帕斯卡三角,是一种二维的数字排列,其中每个数是其正上方两个数的和。在C++程序中,通常会使用两个队列来分别存储当...

    循环队列生成杨辉三角

    本代码使用循环队列来生成杨辉三角,通过循环队列的实现、杨辉三角的生成、QueueLength函数的实现、EnQueue和DeQueue函数的实现、print_n函数的实现和main函数的实现,展示了C语言的编程能力和数据结构的应用。

    循环队列的基本操作以及杨辉三角形输出

    主要的功能:1)循环队列的初始化 2)求循环队列的长度 3)循环队列的插入删除操作 4) 判断循环队列是否为空,是否已经满了 5)遍历循环队列 杨辉三角形

    利用队列打印杨辉三角详细说明

    在这个问题中,我们将用队列来存储每一行的非零数字,以便于按照杨辉三角的规则进行输出。 首先,定义了一个队列结构体`Queue`,包括一个存储元素的数组`data`和表示队头和队尾的指针`front`和`rear`。接着,我们...

    用队列实现杨辉三角的C++源程序

    根据给定的信息,本文将详细解析“用队列实现杨辉三角的C++源程序”这一主题中的关键知识点,包括循环队列的基本概念、队列的主要操作及其在杨辉三角生成算法中的应用。 ### 循环队列的概念 循环队列是一种特殊的...

    杨辉三角形(循环队列的应用C语言描述)

    在VC环境下,我们需要使用标准输入输出库(stdio.h)进行输入输出操作,用数组和指针操作实现循环队列。同时,需要注意边界条件的处理,如队列满和空的状态判断,以及如何正确地更新队头和队尾的索引。 总之,通过...

    输出杨辉三角

    杨辉三角,又称帕斯卡三角...总之,理解并能用C++输出杨辉三角是一项基础的编程技能,它涉及到数组操作、循环控制以及基本的数学概念。熟练掌握这项技能有助于进一步深入学习算法和数据结构,对提升编程能力大有裨益。

    利用队列打印杨辉三角利用队列打印杨辉三角

    通过这种方式,我们可以使用队列的数据结构有效地构建和输出杨辉三角,同时避免了过多的回溯和重复计算,提高了算法的效率。这种方法不仅适用于C语言,还可以应用于其他编程语言,只要具备队列操作的功能即可。

    杨辉三角C++编程

    - 使用循环结构来逐行生成杨辉三角的每一行。 - 每次循环中,先将上一行的最后一个元素再次入队,然后通过循环遍历队列并计算当前行的各个元素。 - 计算每个新元素时,从队列中取出前一个元素,并将其与当前元素相加...

    Python利用队列打印杨辉三角代码 .docx

    总之,这段代码使用队列数据结构和层次遍历的方法来打印一个简化版的杨辉三角,展示了Python中数据结构和算法应用的一个实例。在实际的杨辉三角生成中,通常会使用二维数组或列表嵌套来存储和计算每一行的数字。

    根据输入行数,打印出杨辉三角形.docx

    // 得到杨辉三角 print(ary); // 打印杨辉三角 } private static int[][] getTriangle(int num) { int[][] ary = new int[num][num]; // 用二维数组存储 for(int i = 0; i ; i++) // 竖边、斜边置 1 ary[i]...

    Python杨辉三角形的打印。for循环和列表的方式

    N = [1] n=eval&#40;input("请输入行数:"&#41;) 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) ...

    C语言利用队列打印杨辉三角

    在给定的代码中,我们看到使用队列作为数据结构来实现打印杨辉三角的方法。 首先,我们来理解一下队列这种数据结构。队列是一种先进先出(First In First Out, FIFO)的数据结构,它有两个主要操作:入队(enqueue...

    数据结构实训 打印杨辉三角

    循环队列的相关应用,利用循环队列打印杨辉三角形

    C++利用队列的循环数组来创建杨辉三角.zip

    在这个项目中,我们将使用C++编程语言,结合队列数据结构和循环数组来实现杨辉三角的生成。下面,我们将详细探讨这个过程中的关键知识点。 首先,我们需要理解队列(Queue)这一基本数据结构。队列是一种先进先出...

    杨辉三角算法杨辉三角算法

    在给定的Java代码中,通过数组`a`来存储杨辉三角的数值,并通过嵌套循环来计算并打印出杨辉三角。 ```java public class A { public static void main(String[] args) { // 定义一个二维数组来存储杨辉三角的值 ...

    一个用C语言编写的程序,利用队列打印杨辉三角.pdf

    通过C语言编写程序,利用队列这一基础数据结构来逐行打印杨辉三角,不仅能够帮助初学者加深对队列特性的理解,而且能够在实践中加强对C语言基本知识点的掌握。 首先,要明白杨辉三角的构成原理。在杨辉三角中,每行...

    数据结构——基于C语言实现杨辉三角

    总的来说,这个项目提供了学习和实践C语言、数据结构(特别是循环队列)、以及理解杨辉三角如何在实际编程中应用的机会。通过这种方式,我们可以增强对算法和数据结构的理解,这对于任何想要深入计算机科学的人来说...

Global site tag (gtag.js) - Google Analytics