迴圈佇列列印楊輝三角
#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; }