首页 > 其他分享 >杨辉三角形

杨辉三角形

时间:2023-09-13 10:33:35浏览次数:31  
标签:count return int SeqQueue front 杨辉三角 rear

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;
}

标签:count,return,int,SeqQueue,front,杨辉三角,rear
From: https://www.cnblogs.com/trmbh12/p/17698862.html

相关文章

  • 119. 杨辉三角 II
    给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。示例1:输入:rowIndex=3输出:[1,3,3,1]示例2:输入:rowIndex=0输出:[1]示例3:输入:rowIndex=1输出:[1,1]classSolution:defgetRow(self......
  • 二项式定理和杨辉三角
     杨辉三角解法1:dfs使用记忆化搜索,提升dfs效率代码:intdfs(intn,intm){ if(!m)returnc[n][m]=1; if(m==1)returnc[n][m]=n; if(c[n][m])returnc[n][m]; if(n-m<m)m=n-m; returnc[n][m]=(dfs(n-1,m)+dfs(n-1,m-1))%mod;}解法2:递推时间复杂度O(n^2),如果......
  • 杨辉三角
    杨辉三角首先可以知道中间数为顶上的两个数字相加还有就是边缘上的数字都为一可以分析出中间的数字都是上面数字与左上数字相加这种题目重要的就是找规律#include<stdio.h>intmain(){ intn; inta[30][30]; while(scanf("%d",&n)!=EOF){ if(n==0){ break......
  • 浅谈杨辉三角
    杨辉三角简介唔,先介绍一下什么是杨辉三角吧。杨辉三角是公元1261年,我国宋代数学家杨辉在其著作《详解九章算法》中给出的一个用数字排列起来的三角形阵。由于杨辉在书中引用了贾宪著的《开方作法本源》和“增乘开方法”,因此这个三角形也称“贾宪三角”。在欧洲,这个三角形叫帕斯......
  • 打印杨辉三角
    打印杨辉三角#include<stdio.h>#defineN7intmain(){inta[N][N],i,j;for(i=0;i<N;i++){a[i][0]=1;a[i][i]=1;}for(i=2;i<N;i++){for(j=1;j<i;j++){a[i][j]=a[i-1][j]+a[i-1][j-1];}}for(i=0;i<......
  • Java数组之杨辉三角
    publicclassArrayTestor02{publicstaticvoidmain(String[]args){//构造杨辉三角int[][]yanghui=newint[10][];for(inti=0;i<yanghui.length;i++){int[]row=newint[i+1];yanghui[i]=row;......
  • 杨辉三角
    杨辉三角需要考虑内容杨辉三角中的各部分数据是如何形成的打印输出过程中,每行到底需要空多少格,浏览器中直接居中展示即可,如果是文本中该如何显示未控制单个数字长度时候,展示出来曲线效果如何解决前几行都是一位数字,出现多位数字时候,未控制数字每个数字长度,出现重叠现象该怎么......
  • python习题-杨辉三角
    【题目描述】输出n(0<n)行杨辉三角形,n由用户输入。【源代码程序】n=int(input("请输入要打印的杨辉三角的行数:"))#初始化杨辉三角的第一行triangle=[[1]]#循环生成杨辉三角foriinrange(1,n):#初始化当前行的第一个元素为1row=[1]#循环生成当......
  • leetcode杨辉三角
    给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。出处:leetcode对于此题可以建立一个vector<vector<int>>,对外层开辟numRows行,对内层开辟从零开始每次加一个,并把头尾都置为一,然后根据杨辉三角的规律填入......
  • 杨辉三角
    杨辉三角题目描述本题为代码补全填空题,请将题目中给出的源代码补全,并复制到右侧代码框中,选择对应的编译语言(C/Java)后进行提交。若题目中给出的源代码语言不唯一,则只需选择其一进行补全提交即可。复制后需将源代码中填空部分的下划线删掉,填上你的答案。提交后若未能通过,除考虑填......