news 2026/4/12 12:24:45

队列-杨辉三角

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
队列-杨辉三角

一、题目

编写一个函数利用队列打印杨辉三角形的前 n 行。提示:输出前导空格的语句可以使用如下语句 printf ("\ n %" s ",( n - count )*4,"");,/* n 为总行数, count 为当前行数*/;设计一个主函数进行测试

二、解题思路

这段代码利用循环队列来高效生成并打印杨辉三角的前n行。其核心思路是:每一行的元素通过上一行相邻两数之和计算得出,而队列用于动态存储当前行的元素,并在输出的同时逐步构建下一行。具体来说,每处理一行时,依次出队当前元素并打印,同时将该元素与前一个元素之和入队作为下一行的中间元素;每行首尾始终为 1,因此在每行处理结束后再入队一个 1。通过这种方式,仅用一个队列即可逐行生成杨辉三角,空间效率高且逻辑清晰。

三、代码(C语言)

#include <stdio.h> #include <stdlib.h> #define MaxQueueSize 100 // 队列结构体定义 typedef struct { int data[MaxQueueSize]; // 队头指针 int front; //队尾指针 int rear; int count; } SeqQueue; // 初始化队列 void InitQueue(SeqQueue *q) { q->front = q->rear = q->count=0; } // 判断队列是否为空 int IsEmpty(SeqQueue *q) { if(q->count!=0){ return 0; } return 1; } // 入队操作 int QueueAppend(SeqQueue *q, int val) { if (q->count>0&&q->front==q->rear) { printf("队列已满,无法入队!\n"); return 0; } q->data[q->rear] = val; q->rear = (q->rear + 1) %MaxQueueSize; q->count++; return 1; } // 出队操作 int QueueDelete(SeqQueue *q, int *val) { if (IsEmpty(q)) { printf("队列为空,无法出队!\n"); return 0; } *val = q->data[q->front]; q->front = (q->front + 1) % MaxQueueSize; q->count--; return 1; } // 获取队头元素-不出队 int QueueGet(SeqQueue *q, int *val) { if (IsEmpty(q)) { printf("队列为空,无队头元素!\n"); return 0; } *val = q->data[q->front]; return 1; } // 打印杨辉三角前n行 void PrintYangHui(int n) { if (n <= 0) { printf("请输入大于0的行数!\n"); return; } SeqQueue q; InitQueue(&q); //入队1 QueueAppend(&q, 1); //当前行数 int count = 1; while (count <= n) { // 打印空格 printf("%*s", (n - count)*4, ""); //前一个元素 int prev = 0; //当前元素 int current; int i; // 打印当前行并计算下一行 for (i = 0; i < count; i++) { //出队 QueueDelete(&q, &current); //计算下一行元素,入队 QueueAppend(&q, prev + current); printf("%-8d", current); //更新前一个元素 prev = current; } //每行第一个元素都为1 QueueAppend(&q, 1); //换行 printf("\n"); //行数加1 count++; } } int main(int argc, char *argv[]) { int n; printf("请输入要打印的杨辉三角行数:\n"); scanf("%d",&n); printf("杨辉三角形的前%d行为:\n",n); PrintYangHui(n); return 0; }

四、测试

键盘输入:5

输出:

五、总结

1. 核心知识点拆解

(1) main 函数的标准格式与参数

c

运行

int main(int argc, char *argv[])
  • int main():C 程序的入口函数,程序从这里开始执行,int表示函数返回整型值。
  • argc(argument count):命令行参数的个数,这里代码未使用,但属于标准写法。
  • char *argv[](argument vector):字符串数组,存储命令行参数,同样未在这段代码中使用,但这是 main 函数的标准参数形式。
(2) 变量定义

c

运行

int n;
  • 定义了一个整型变量n,用于存储用户输入的杨辉三角行数,这是 C 语言中最基础的变量声明,需先定义后使用。
(3) 输入输出函数(标准 IO)
  • printf():格式化输出函数,用于向控制台打印提示信息和文本。
    • 示例中printf("请输入要打印的杨辉三角行数:\n");是普通字符串输出;
    • printf("杨辉三角形的前%d行为:\n",n);用到了格式控制符%d,用于输出整型变量n的值。
  • scanf():格式化输入函数,用于读取用户从控制台输入的数据。
    • scanf("%d",&n);%d匹配整型输入,&n是变量n地址,scanf 需要通过地址才能修改变量的值(指针 / 地址的基础应用)。
(4) 函数调用

c

运行

PrintYangHui(n);
  • 调用了名为PrintYangHui的自定义函数,参数是变量n,这体现了 C 语言的函数调用机制
    • 调用前需确保该函数已声明(否则会编译警告 / 错误);
    • 参数传递方式为值传递(把n的值拷贝给函数的形参)。
(5) 程序返回值

c

运行

return 0;
  • main 函数返回0表示程序正常退出,返回非 0 值(如 1)通常表示程序异常退出,这是操作系统判断程序运行状态的依据。
(6) 代码结构与规范
  • 代码遵循 C 语言的基本结构:变量定义 → 输入 → 输出 → 函数调用 → 返回;
  • 语句以分号;结尾,代码块用{}包裹,这是 C 语言的语法规范。

2. 补充说明(关联杨辉三角完整实现)

这段代码是主函数,完整实现还需定义PrintYangHui函数,会额外涉及:

  • 二维数组(存储杨辉三角的数值);
  • 循环结构(for/while 循环,遍历行和列);
  • 杨辉三角的数学规律(每行首尾为 1,中间值 = 上一行相邻两个值之和)。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/6 3:54:52

【Java毕设全套源码+文档】基于Java旅游民宿信息管理系统的设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/10 17:48:25

【强化学习】第四章:动态规划(DP)

【强化学习】第四章&#xff1a;动态规划(DP) 说明&#xff1a;学习本篇时一定一定要认真学完 https://blog.csdn.net/friday1203/article/details/155533020?spm1001.2014.3001.5501 &#xff0c;因为动态规划就是为了求解MDP问题的。所以你首先要非常清晰什么是MDP、MDP框架…

作者头像 李华
网站建设 2026/4/11 10:08:25

AutoGPT能否用于法律文书起草?专业度测评

AutoGPT能否用于法律文书起草&#xff1f;专业度测评 在律师事务所的某个深夜&#xff0c;一位年轻律师正对着屏幕反复核对一份股权转让协议中的条款引用——这已是本周第三份类似合同。他需要确认《公司法》第七十二条是否仍适用、地方工商登记要求有无更新、同类判例中法院如…

作者头像 李华
网站建设 2026/4/11 14:32:50

AutoGPT运行资源消耗测试:需要多少GPU显存?

AutoGPT运行资源消耗测试&#xff1a;需要多少GPU显存&#xff1f; 在当前AI技术快速演进的背景下&#xff0c;大型语言模型&#xff08;LLM&#xff09;正从被动应答工具向具备自主决策能力的智能体转型。像AutoGPT这样的开源项目&#xff0c;已经能够基于一个简单目标——比如…

作者头像 李华
网站建设 2026/4/11 7:06:25

椭圆曲线的“加法”群规则

这四个式子是在讲椭圆曲线的“加法”群规则(chord-and-tangent)。核心口诀是: 同一条直线与椭圆曲线的三个交点(按重数计算)相加等于 0(单位元) 也就是:若直线与曲线交于 A,B,C,则 A+B+C=0。 这里的 0(图里写 0)指的是无穷远点 O,是加法单位元。 同时,点的相反数是…

作者头像 李华
网站建设 2026/4/11 18:02:02

支持多模型接入的LobeChat,如何实现低成本高回报的Token售卖?

支持多模型接入的LobeChat&#xff0c;如何实现低成本高回报的Token售卖&#xff1f; 在AI应用爆发式增长的今天&#xff0c;越来越多企业开始尝试将大语言模型&#xff08;LLM&#xff09;集成到自己的产品中。然而&#xff0c;直接调用闭源API成本高昂&#xff0c;而自建系统…

作者头像 李华