问题描述 利用队列相关操作实现打印输出指定行数的杨辉三角形。 输入描述 输入要打印的行数,15>n>0。 输出描述 输出杨辉三角形。注:每个数字设置4个域宽,上一行的第一个数字比下一行第一个数字右缩进2个空格。 用c语言编写代码
时间: 2024-10-16 09:09:23 浏览: 40
根据输入行数,打印出杨辉三角形.docx
5星 · 资源好评率100%
杨辉三角是一个经典的动态规划问题,可以使用队列数据结构来辅助存储每一层的元素。下面是使用 C 语言实现的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义队列结构体,用于存储杨辉三角的每行
typedef struct {
int data[100]; // 队列中存放整数
int front; // 队首元素索引
int rear; // 队尾元素索引
} Queue;
// 初始化队列
void initQueue(Queue* queue) {
queue->front = -1;
queue->rear = -1;
}
// 入队操作
void enqueue(Queue* queue, int num) {
if (queue->rear == queue->front + 100 - 1) {
printf("队列已满,无法入队\n");
return;
}
queue->data[++queue->rear] = num;
}
// 出队操作
int dequeue(Queue* queue) {
if (queue->front == queue->rear) {
printf("队列为空,无法出队\n");
return -1;
}
return queue->data[queue->front++];
}
// 打印队列内容,模拟杨辉三角的输出格式
void printTriangle(Queue* queue, int level) {
for (int i = 0; i <= level; ++i) {
for (int j = 0; j <= level - i);
printf("%4d", dequeue(&queue)); // 输出当前节点
for (int k = 0; k < space; ++k)
printf(" ");
if (j != level - i)
printf("%4d", dequeue(&queue)); // 输出下一个节点
printf("\n");
}
enqueue(&queue, 0); // 每一层结束后添加0
}
}
int main() {
int n;
printf("请输入要打印的行数(n > 0): ");
scanf("%d", &n);
if (n <= 0) {
printf("输入错误,请输入正整数。\n");
return 1;
}
Queue triangle;
initQueue(&triangle);
// 构建杨辉三角
for (int row = 1; row <= n; ++row) {
for (int col = 0; col <= row; ++col) {
if (col == 0 || col == row) {
enqueue(&triangle, 1);
} else {
enqueue(&triangle, dequeue(&triangle) + dequeue(&triangle));
}
}
printTriangle(&triangle, row);
}
return 0;
}
```
这个程序首先定义了一个队列结构体,并实现了基本的队列操作。然后通过构建杨辉三角的核心算法(递归公式),将每层的元素依次加入队列,最后按照规定的格式打印出来。
阅读全文