杨辉三角形
1.题目
例3.6打印杨辉三角形。
利用队列打印杨辉三角形。杨辉三角形的图案如图3.18所示。
2.算法思路
3.代码
//
// Created by trmbh on 2023-09-12.
//
#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
#define MAXSIZE 50
#define QueueElementType int
/* 顺序队列 */
typedef struct {
QueueElementType element[MAXSIZE];
int front;
int rear;
} SeqQueue;
void InitQueue(SeqQueue *Q) {
Q->front = Q->rear = 0;
}
int EnterQueue(SeqQueue *Q, QueueElementType x) {
/* 队列满(如果均用Q->front == Q->rear,那么无法判断队满还是队空,所以牺牲一个存储空间) */
if ((Q->rear + 1) % MAXSIZE == Q->front) return FALSE;
Q->element[Q->rear] = x;
Q->rear = (Q->rear + 1) % MAXSIZE;
return TRUE;
}
int DeleteQueue(SeqQueue *Q, QueueElementType *x) {
/* 队列空 */
if (Q->front == Q->rear) return FALSE;
*x = Q->element[Q->front];
Q->front = (Q->front + 1) % MAXSIZE;
}
int DestoryQueue(SeqQueue *Q) {
Q->front = Q->rear = 0;
return TRUE;
}
QueueElementType GetHead(SeqQueue *Q) {
return Q->element[Q->front];
}
int IsEmpty(SeqQueue *Q) {
if (Q->front == Q->rear) return TRUE;
else return FALSE;
}
void Print_Space(){ printf(" ");}
void Format_Adjustment(int n, int count){
/* 注意由于目前要打印的行其实是count-1, 所以如下所示n-(count-1)*/
for (int i = 0; i < n - count + 1; i++) {
Print_Space();
}
}
void Print_Yang_Hui_Triangle(SeqQueue *Q) {
/* 这里初始化第一行后,从第二行开始 */
int count = 2;
int n;
QueueElementType temp, x;
scanf("%d", &n);
/* 初始化第一行第一个元素,这里由于下一行的值取决于上一行的值,所以先弄第一行作为基础 */
EnterQueue(Q, 1);
/* count的值对应第n行*/
while (count <= n) {
/* 第n行首个元素 */
EnterQueue(Q, 1);
Format_Adjustment(n, count);
/* 获得第n行中间n-2个元素,同时打印第n-1行前n-2个元素*/
for (int i = 1; i <= count - 2; i++) {
DeleteQueue(Q, &temp);
printf("%d", temp);
Print_Space();
Print_Space();
x = GetHead(Q);
EnterQueue(Q, temp + x);
}
/* 打印n-1行最后一个元素,第n行最后一个元素入队*/
DeleteQueue(Q, &x);
printf("%d\n", x);
EnterQueue(Q, 1);
count++;
}
/* 这里注意一个问题,第n行的元素在打印第n-1行时得到,在获得第n+1行时打印,有一个延迟,所以单独处理最后一行(第n行只入队未出队)*/
while (!IsEmpty(Q)) {
DeleteQueue(Q, &x);
printf("%d", x);
Print_Space();
Print_Space();
}
}
int main() {
SeqQueue Q;
InitQueue(&Q);
Print_Yang_Hui_Triangle(&Q);
DestoryQueue(&Q);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了