杨辉三角基本形式
1? ? ? ? ? ? ? ? ? ? ? ? =>? ? ? ? 1 0 0 0 0 0 0 0? ?——即对一个全0的二维数组进行赋值
1 1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1 1 0 0 0 0 0 0
1 2 1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1 2 1 0 0 0 0 0
1 3 3 1? ? ? ? ? ? ? ? ? ? ? ? ? ?1 3 3 1 0 0 0 0
1 4 6 4 1? ? ? ? ? ? ? ? ? ? ? ? 1 4 6 4 1 0 0 0
……? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ……
由上得:
1. 存储:用二维数组?
2.特点:第一列全为0,对角线全为0
? ? ? ? ? ? ?其余非1的数为正上方和正上方左边的数之和?
代码演示:
int main(void)
{
//初始化二维数组
int arr[100][100] = { 0 };
//获取想打印的行数
int n = 0;
scanf("%d", &n);
//开始赋值
int i = 0;
int j = 0;
for (i = 0; i < n; i++)
{
for (j = 0; j <= i; j++)
{
//第一列换为1
if (j == 0)
{
arr[i][j] = 1;
}
//对角线换为1
if (i == j)
{
arr[i][j] = 1;
}
//计算非1数字
if (i >= 2 && j >= 1)
{
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
}
}
}
//打印杨辉三角
for (i = 0; i < n; i++)
{
for (j = 0; j <= i; j++)
{
printf("%2d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
结果:
n = 10;
代码演示 -将其换为三角形
int main(void)
{
//初始化二维数组
int arr[100][100] = { 0 };
//获取想打印的行数
int n = 0;
scanf("%d", &n);
//开始赋值
int i = 0;
int j = 0;
for (i = 0; i < n; i++)
{
for (j = 0; j <= i; j++)
{
//第一列换为1
if (j == 0)
{
arr[i][j] = 1;
}
//对角线换为1
if (i == j)
{
arr[i][j] = 1;
}
//计算非1数字
if (i >= 2 && j >= 1)
{
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
}
}
}
//打印杨辉三角
for (i = 0; i < n; i++)
{//打印空格
for (j = 0; j <= n - 1 - i; j++)
{
printf(" ");
}
//打印数字
for (j = 0; j <= i; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
?
|