打印杨辉三角形
问题描述
利用队列相关操作实现打印输出指定行数的杨辉三角形。
输入描述
输入要打印的行数,15>n>0。
输出描述
输出杨辉三角形。
注:每个数字设置4个域宽,上一行的第一个数字比下一行第一个数字右缩进2个空格。
样例输入
3
样例输出
1 1 1 1 2 1
具体分析过程文字叙述不清,视频讲解更加详细一些,在这里向大家推荐B站视频链接
http://【3.6链队列和队列的应用(包括杨辉三角)-2 考研《数据结构C语言版》严蔚敏知识点讲解】https://www.bilibili.com/video/BV1we411V7W6?vd_source=1e0249467f7f18bba256fc882a4d9649
具体内容在48:13 ,个人认为up主讲解的非常好!
#include<stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef int DataType;
typedef struct Node
{
DataType data[MAXSIZE];
int front;
int rear;
}CirQueue;
static void InitQueue(CirQueue& Q) //初始化队列
{
Q.front = Q.rear = 0;
return;
}
static void EnQueue(CirQueue& Q, int num) //元素入队
{
Q.data[Q.rear] = num;
Q.rear = (Q.rear + 1) % MAXSIZE;
return;
}
static int DeQueue(CirQueue& Q) //元素出队
{
int x = Q.data[Q.front];
Q.front = (Q.front + 1) % MAXSIZE;
return x;
}
int main()
{
CirQueue Q;
InitQueue(Q);
EnQueue(Q, 1); //将1入队
int n = 0;
scanf("%d", &n); //输入打印行数
for (int i = 0; i < n; i++)
{
for (int k = n - 1; k > i; k--) //打印每行前面的空格
printf(" ");
for (int j = 0; j < i; j++)
{
int left = Q.data[Q.front]; //队列第一个元素
printf("%4d", DeQueue(Q));
int right = Q.data[Q.front]; //队列第二个元素
EnQueue(Q, left + right);
}
printf(" 1\n");
EnQueue(Q, 1); //将1入队
}
return 0;
}
结果展示: