请你输出一个倒立的杨辉三角形
杨辉三角描述如下图所示:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
输入格式:
输入只包含一个正整数n(0< n < 40),表示将要输出的倒立杨辉三角层数。
输入样例:
5
输出样例:
1 4 6 4 1
1 3 3 1
1 2 1
1 1
1
#include <stdio.h>
#include <math.h>
int main(void)
{
int a[40][40];
int n,i,j;
scanf("%d",&n);
/*思路是把正杨辉三角二维数组求出来,
再倒置输出数组*/
//先将三个1存入数组,为接下来的公式做基础
a[0][0]=1,a[1][0]=1,a[1][1]=1;
/*
图例:
1
1 1
. . .
. . . .
*/
for(i=2; i<n; i++)
//i从2开始是因为0,1行已经确定了
{
a[i][0]=1,a[i][i]=1;
/*
以上赋值保证边界处值为1
图例:
1
1 1
1 . 1
1 . . 1
1 . . . 1
*/
//根据杨辉三角,所求数等于上面2个数之和
for(j=1; j<=i-1; j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
for(i=n-1; i>=0; i--)
{
//倒置打印每一行
for(j=0; j<=i; j++)
{
printf("%d",a[i][j]);
//每一行边界后面无空格
if(j!=i)
printf(" ");
}
//最后一行后面无空行
if(i!=0)
printf("\n");
}
}
整个题目逻辑不强,但要理清数组下标,不然容易导致部分数组垃圾值,开始的时候没太注意输出格式,导致边界处多了空格,以及最后一行后面有空行。
大佬们ak速度又快,做的又对,瑟瑟发抖|・ω・`)
-----分割线-----
修正一下,之前定义的二维数组为int类型
然而数据达到一定值会超出范围,故需要将二维数组改为double类型
附上代码
#include <stdio.h>
#include <math.h>
int main(void)
{
double a[40][40];
int n,i,j;
scanf("%d",&n);
/*思路是把正杨辉三角二维数组求出来,
再倒置输出数组*/
//先将三个1存入数组,为接下来的公式做基础
a[0][0]=1,a[1][0]=1,a[1][1]=1;
/*
图例:
1
1 1
. . .
. . . .
*/
for(i=2; i<n; i++)
//i从2开始是因为0,1行已经确定了
{
a[i][0]=1,a[i][i]=1;
/*
以上赋值保证边界处值为1
图例:
1
1 1
1 . 1
1 . . 1
1 . . . 1
*/
//根据杨辉三角,所求数等于上面2个数之和
for(j=1; j<=i-1; j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
for(i=n-1; i>=0; i--)
{
//倒置打印每一行
for(j=0; j<=i; j++)
{
printf("%.f",a[i][j]);
//每一行边界后面无空格
if(j!=i)
printf(" ");
}
//最后一行后面无空行
if(i!=0)
printf("\n");
}
}