0
点赞
收藏
分享

微信扫一扫

ACM训练: 倒杨辉三角形

鱼满舱 2022-02-14 阅读 222

题目描述

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",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;
}
举报

相关推荐

0 条评论