利用队列打印杨辉三角

总的思路 . 通过 n-1行 来得到 下一行(n行)的数据并将 入队,与此同时将 n-1 数据出队;
第一步:构造第 —行的数据;
第一步:如何得到下一行的数据?
结合杨辉三角的自身特性:1, 第一行
1 1 第二行
1 2 1 第三行
1 3 3 1 第四行
1 4 6 4 1 第五行
················
观察可得:如第 4 行 第 2 个数由第 三 行的 第2个与第1个得到,第 3 个数可由第三行的 第3个与第2个数得到, 依此类推
第四行第 n 个 可由第三行的第 n-1个与 第n个得到。因此, 在n-1 行 出队时,需要 记录 前一个数;可能会问第一怎么得到, 因为第 1 个数前一个没有数, 只需将 用来记录前一个数的变量置零就好。通过这样就可以得到第n行的前n-1个数,还差最后一个数,因为每一行最后一个数固定为1,所以将1入队;

用队列打印杨辉三角c

#include<stdio.h>

#define MAX 100

struct queue{
	int a[MAX];
	int front;
	int rear;
}; 

int main(void)
{
	struct queue xh;
	int n, i, j, a, b;
	
	xh.rear = xh.front = 0;  /* 对队列进行初始化,这里不一定赋值0,只要在数组内,但要保证头尾指向一致*/ 
	scanf("%d", &n);
    xh.a[xh.rear] = 1;
    xh.rear = (xh.rear + 1) % MAX; /*构造第一行数据*/ 
    for(i=1; i<=n; i++)
    {
    	a = 0;    /* 记录其前一个数 */ 
    	for(j=0; j<i; j++)
    	{
    		if ((xh.rear + 1)%MAX != xh.front)
    		{
    		    b = xh.a[xh.front];
    	    	xh.front = (xh.front + 1) % MAX;
		    	printf("%d ", b);       /* 打印第 i 行的数据*/
		    	xh.a[xh.rear] = b+a;
		    	xh.rear = (xh.rear + 1) % MAX;      /*创建 i+1 行的数据,并入队 */ 
		        a = b;
			}
		}
		xh.a[xh.rear] = 1;
		xh.rear = (xh.rear + 1) % MAX;
		printf("\n");
	}
	return 0;
}

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值