在屏幕上显示杨辉三角形:
问题分析与算法设计:
杨辉三角形中的数,正是(x+y)的N次方幂展开式中各项的系数。
从杨辉三角形的特点出发,可以总结出:
(1) 第N行有N+1个值(设起始行为第0行);
(2) 对于第N行的第J个值:(N>=2)
当 J=1 或 J=N+1 时: 其值为1;
当 J! =1 且 J!= N+1时: 其值为第N-1行的第J-1个值与第N-1行第J个值之和;
将这些特点提炼成数学公式可表示为:
c(x,y) = c(x-1,y-1) + c(x-1,y) , x=1或x=N+1 时 c(x,y) = 1
此外,从图上还可以看出,第n行数字的和为2 n从杨辉三角中一个确定的数的“左(右)肩” 出发,向右(左)上方作一条和左斜边
平行的射线,射线上各数的和等于这个数。
以下分别列出根据这两种规律输出杨辉三角,编写的代码
(1)
#include<stdio.h>
int c(int x, int y)
{
int z;
if((y == 1) || (y == x+1))
{
return 1;
}
z = c(x - 1, y - 1) + c(x - 1, y);
return z;
}
int main()
{
int i, j, n = 13;
printf("N = ");
while(n > 12)
{
scanf("%d", &n);
}
for(i = 0; i <=n; i++)
{
for(j = 0; j < 12 - i; j++)
{
printf(" ");
}
for(j = 1; j < i + 2; j++)
{
printf("%4d", c(i, j));
}
printf("\n");
}
return 0;
(2)
#include<stdio.h>
int Value(int x, int y)
{
int value = 0, i;
if(x == 0 && y < 0 )
{
return 0;
}
if(y <= 0 || y == x)
{
return 1;
}
for(i = 1; i <= x ; i++)
{
value = value + Value(x-i,y-1);
}
return value;
}
int main()
{
int num = 13;
int i, j;
printf("Please input a number: \n");
while(num >12)
{
printf("Num = ");
scanf("%d", &num);
}
for(i = 0; i < num +1; i++)
{
for(j = 0; j <= num+1-i; j++)
{
printf("%2c",' ');
}
for(j = 0; j <= i; j++)
{
printf("%4d", Value(i,j));
}
printf("\n");
}
return 0;
}