题目描述
按要求输入如下格式的杨辉三角
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
最多输出10层
输入
输入只包含一个正整数n,表示将要输出的杨辉三角的层数。
输出
对应于该输入,请输出相应层数的杨辉三角,每一层的整数之间用一个空格隔开
样例输入
5
样例输出
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
一,错误解法1(用了一维数组)
#include<iostream>
using namespace std;
int a[10] = {};
int main()
{
int n;
scanf("%d",&n);
a[1] = 1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
a[j]=a[j-1]+a[j];
printf("%d ",a[j]);
if((j==i)&&j!=n)
{
printf("\n");
}
}
}
}
二,错误解法2(未分端点和非端点讨论)
#include<iostream>
using namespace std;
int a[11][11] ={0,0,0,0,0,0,0,0,0,0,0};
int main()
{
int n;
scanf("%d",&n);
a[1][1]=1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
printf("%d ",&a[i][j]);
if((j==i)&&(j!=n))
{
printf("\n");
}
}
}
return 0;
}
三,正确解法
#include<iostream>
using namespace std;
int a[11][11];
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
for(int j=0;j<=i;j++)
{
if(i==j||j==0) //注意分两种情况,位于端点和非端点,当初混为一谈,故难做。
{
a[i][j]=1;
}
else
{
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
printf("%d",a[i][j]);
if(i!=j)
printf(" ");
if((i==j)&&(j!=n-1))
printf("\n");
}
}
return 0;
}