BASIC-6 基础练习 杨辉三角形 利用队列实现

问题描述
杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。

它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。

下面给出了杨辉三角形的前4行:

1

1 1

1 2 1

1 3 3 1

给出n,输出它的前n行。

输入格式
输入包含一个数n。

输出格式
输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空格。
样例输入
4
样例输出
1
1 1
1 2 1
1 3 3 1
数据规模与约定
1 <= n <= 34。

#include
int main()
{
	int a[34][34],i,l,n;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
			for(l=0;l<i+1;l++)
		{
			if(l==0||l==i)
				a[i][l]=1;
			else
				a[i][l]=a[i-1][l]+a[i-1][l-1];
			printf("%d ",a[i][l]);
		}
		printf("\n");
	}
	return 0;
}
				
				

利用队列实现输出杨辉三角

#include
#include
#define DateType int
#define MAXSIZE 100   //队列的最大容量//


typedef struct SeqQueue
{
	DateType data[MAXSIZE];//结构体数组
	int front,rear;//数组下标
}SeqQueue, *PSeqQueue;

PSeqQueue  Init_SeqQueue()//队列初始化
{
	PSeqQueue Q;
	Q= (PSeqQueue)malloc(sizeof(SeqQueue));
	if (Q)
	{
		Q->front = 0;
		Q->rear = 0;
	}
	return Q;
}


int  Empty_SeqQueue(PSeqQueue Q)//返回值:1表示为空,0表示非空//
{
	if (Q && Q->front == Q->rear)
		return (1);
	else
		return (0);
}

int   In_SeqQueue(PSeqQueue Q, DateType  x)//返回值:1表示成功,-1表示队满溢出//
{    
	if ((Q->rear + 1) % MAXSIZE == Q->front)
	{
		printf("队满");
		return -1;    /*队满不能入队*/
	}
	else
	{
		Q->rear = (Q->rear + 1) % MAXSIZE;
		Q->data[Q->rear] = x;
		return 1;    /*入队完成*/
	}
}
int Out_SeqQueue(PSeqQueue Q, DateType *x)//出队//
{

	if (Empty_SeqQueue(Q)) {
		printf("队空");
		return -1;    /*队空不能出队*/
	}
	else
	{
		Q->front = (Q->front + 1) % MAXSIZE;
		*x= Q->data[Q->front];
		return 1;    /*出队完成*/
	}
}
int get_first(PSeqQueue Q)
{
	return Q->data[Q->front+1];
}

void yh(int n)
{
	int i, j, m;
	PSeqQueue Q;
	Q = Init_SeqQueue();
	In_SeqQueue(Q, 0);
	In_SeqQueue(Q, 1);
	for (i = 1; i < n; i++)
		printf("  ");
	printf("%4d\n", 1);

	for (i = 1; i <n; i++)
	{
		for (j=i+1; j < n; j++)
			printf("  ");
		In_SeqQueue(Q, 0);
		for (j = 0; j <=i; j++)
		{
			Out_SeqQueue(Q, &m);
			m = m+get_first(Q);
			In_SeqQueue(Q, m);
			printf("%4d", m);
		}
		printf("\n");
	}
	return 0;
}
int main()
{
	int n;
	scanf("%d", &n);
	yh(n);
	printf("\n");
	system("pause");
	return 0;
}

1、最外层的数字始终是 1
BASIC-6 基础练习 杨辉三角形 利用队列实现_第1张图片
2、第二层是自然数列

BASIC-6 基础练习 杨辉三角形 利用队列实现_第2张图片
3、第三层是三角数列(等差数列的和n对应第二层)
S n = n ∗ ( n + 1 ) 2     ( n ∈ N ∗ ) \mathtt{S}_n=\frac{n*(n+1)}{2}~~~(n\in\N*) Sn=2n(n+1)   (nN)
Sn数列每相邻两项的和为n的平方
n ∗ ( n + 1 ) 2 + n ∗ ( n − 1 ) 2 = n 2 \frac{n*(n+1)}{2}+\frac{n*(n-1)}{2}=n^2 2n(n+1)+2n(n1)=n2
BASIC-6 基础练习 杨辉三角形 利用队列实现_第3张图片
5、每一层的数字之和是一个2倍增长的数列
BASIC-6 基础练习 杨辉三角形 利用队列实现_第4张图片

你可能感兴趣的:(蓝桥杯,杨辉三角)