据说数据结构考试必须用学的这些数据结构,所以就老老实实写了,没有用规律,STL容器之类的,博主的码风太丑,不喜勿喷
杨辉三角形具有如下特征:1、每行数字左右对称,由1开始逐渐变大,然后变小,回到1。 2、第n行的数字个数为n个。 3、第n行数字和为2^(n-1)。 4、每个数字等于上一行的左右两个数字之和。可用此性质写出整个帕斯卡三角形。 5、将第2n+1行第1个数,跟第2n+2行第3个数、第2n+3行第5个数……连成一线,这些数的和是第2n个斐波那契数。将第2n行第2个数,跟第2n+1行第4个数、第2n+2行第6个数……这些数之和是第2n-1个斐波那契数。 6、第n行的第1个数为1,第二个数为1×(n-1),第三个数为1×(n-1)×(n-2)/2,第四个数为1×(n-1)×(n-2)/2×(n-3)/3…依此类推。例如7阶杨辉三角形如下:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
输入要打印的杨辉三角形的阶n。
打印出n阶杨辉三角形。
用一个循环队列储存一行,计算下一行时从队头(front)取两个元素求和放入队尾(rear),覆盖上一行的数据并输出。
注意:从第2行的第二个元素开始,所有元素均会被用到两次。
//基本思路:每次出队2个元素,加起来后入队
#include
int main()
{
int n,front=0,rear=0;//定义阶数,队头,队尾
scanf("%d",&n);//输入阶数
int cqueue[n];//定义循环队列
for(int t=1;t<=n;++t)//逐行输出
{
if(t==1)//如果是第一行的话无需入队 直接输出
printf("1 \n");
else if(t==2)//第二行
{
cqueue[front%n]=1;
cqueue[++rear%n]=1;
for(int i=front;i<=rear;++i)
printf("%d ",cqueue[i]);
printf("\n");
}
else//行数大于2
{
for(int i=1;i<t;++i)//i表示第t行的第i个元素
{
if(i==1)//每行的第一个位置输出1
printf("%d ",cqueue[front]);
if(i==t-1)//每行的最后一个数设置为1
{
rear=(rear+1)%n;
cqueue[rear]=1;
}
else//首先rear后移一位,用front和front+1位的元素计算rear位上元素值
{
rear=(rear+1)%n;
cqueue[rear]=cqueue[front]+cqueue[(front+1)%n];
front=(front+1)%n;
}
printf("%d ",cqueue[rear]);
}
printf("\n");
}
}
return 0;
}
swust oj 966.打印杨辉三角形