题目描述
Fans喜欢图形,而且喜欢把图形倒过来欣赏。有一次,他看见杨辉三角形 了,觉得很新鲜,于是就把它们大大小小地摆布出来。输入一些整数n(1≤n≤10),读入其每个整数,以该整数为行数,其画出来的倒杨辉三角形就是fans所喜欢欣赏的。Fans是手工做的,你却可以用编程更快捷地做出来,多爽啊!
输入
多组数据,每组数据占一行
输出
每个倒杨辉三角参考样例输出,每输出一个后必跟一空行
样例输入
5 3
样例输出
1 4 6 4 1 1 3 3 1 1 2 1 1 1 1 1 2 1 1 1 1
首先我们需要弄出一个正杨辉三角,以上面的例子为例。
(5)
1
11
121
1331
14641
(3)
1
11
121
利用一个二维数组来求解这个杨辉三角:
int n;
int a[n][n];
for(int i=0;i<n;i++) //把每行第一个和最后一个元素值赋值给1
{
a[i][0]=1;
a[i][i]=1;
}
for(int i=2;i<n;i++)
{
for(int j=1;j<i;j++)
{
a[i][j]=a[i-1][j]+a[i-1][j-1];
}
}
ok了,正杨辉三角就做出来了,但是我们需要的是倒杨辉三角。
不妨倒着输出一下,就可以了。
我们需要在各个元素之间插入空格。
每两个元素之间的间隔为6,实际间隔需要减掉后面那个数的位数。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int a[n][n];
int temp=0;
int wei=0;
for(int i=0;i<n;i++) //把每行第一个和最后一个元素值赋值给1
{
a[i][0]=1;
a[i][i]=1;
}
for(int i=2;i<n;i++)
{
for(int j=1;j<i;j++)
{
a[i][j]=a[i-1][j]+a[i-1][j-1];
}
}
for(int i=n-1;i>=0;i--)
{
for(int j=1;j<=((n-i))*3-1;j++)
{
printf(" "); //用于输出每行前面的空格
}
for(int j=0;j<=i;j++)
{
wei=0; //用来保存数组的位数
printf("%d",a[i][j]); //输出这个值
if(j<=i-1)
{
temp=a[i][j+1]; //把后面的值拿出来
}
else
{
wei=6;
}
while(temp!=0) //统计后面值的位数
{
wei++;
temp=temp/10;
}
if(j!=i)
{
for(int i=1;i<=6-wei;i++) //每两个数之间的间隔是6,实际间隔要减掉后面的位数
{
printf(" ");
}
}
}
printf("\n");
}
printf("\n");
}
return 0;
}