1. 程式人生 > >迴圈佇列列印楊輝三角

迴圈佇列列印楊輝三角

#include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<iostream> #include<algorithm> #include<string> #include<set> #include<map> #include<vector> #include<iomanip> #include<queue>

typedef long long ll; const int inf = 0x3f3f3f3f;

using namespace std;

#define maxsize 600

typedef struct{     int *base;     int front,rear; }que;

int init(que &q){

    q.base = (int *)malloc(sizeof(int) * maxsize);     if(!q.base)     {         printf("分配記憶體失敗!\n");         return 0;     }

    else     {

        q.front = 0;         q.rear = q.front;         return 1;     }

}

int push(que &q,int val){

    if(q.rear + 1 % maxsize == q.front)     {         printf("佇列已滿!\n");         return 0;     }

    else     {

        q.base[q.rear] = val;         q.rear = (q.rear + 1) % maxsize;

        return 1;     }

}

int pop(que &q,int &val){

    if(q.front == q.rear)     {         printf("佇列為空!\n");         return 0;     }

    else     {

        val = q.base[q.front];         q.front = (1 + q.front) % maxsize;

        return 1;     }

}

int main(){

    que q;     init(q);

    int n,temp,now;     scanf("%d",&n);     push(q,1);    //將第一行的1入隊

    for(int i = 2;i <= n;i++)    //從第二行到第n行的入隊操作,以及列印第i - 1行的所有元素     {

        push(q,1);        //每一行的第一個元素         for(int j = 1;j <= i - 2;j++)    //求第2個到i - 1個元素的值         {

            pop(q,temp);             printf("%-3d ",temp);        //列印上一行的元素    執行i - 2次迴圈 而上一行有i - 1個元素             now = q.base[q.front];             push(q,now + temp);

        }

        pop(q,temp);                 printf("%-3d\n",temp);        //列印上一行的最後一個元素         push(q,1);            //將本行的最後一個元素入隊     }

    for(int i = 1;i <= n;i++)        //列印第n行元素     {         pop(q,temp);         printf("%-3d ",temp);     }     printf("\n");

    free(q.base);

    return 0; }