杨辉三角的一些思路及其代码
//法三 正规杨辉三角 (防止越界行多创建一行,列多创建两列)
//保存数据
void set(int a[10+1][2 * 10 + 1], int n) //[][]和a本身空间要一致,不然行列数会发生变化
{
int i = 0;
int j = 0;
a[1][n] = 1;
for (i = 1; i <=n ; i++)
{
for (j = 1; j <= 2 * n - 1; j++)
{
if (i == 1 && j == n)
continue;
else
a[i][j] = a[i - 1][j - 1] + a[i - 1][j + 1];
}
}
}
//初始化
void Init(int a[10+1][2 * 10 + 1], int n)
{
int i = 0;
int j = 0;
for (i = 0; i < n+1; i++)
{
for (j = 0; j < 2 * n + 1; j++)
{
a[i][j] = 0;
}
}
}
//打印
void print(int a[10+1][2 * 10 + 1], int n)
{
int i = 0;
int j = 0;
for (i = 1; i <= n; i++)
{
for (j = 1; j <= 2 * n - 1; j++) //最右边一列不打印
{
if (a[i][j] == 0)
{
printf(" "); //3个空格,格式好看
}
else
{
printf("%3d", a[i][j]); //占3个字符,格式好看
}
}
printf("\n");
}
}
int main()
{
int n = 0; //a[i][j] = a[i - 1][j - 1] + a[i - 1][j + 1] - 2 * '0';
scanf("%d", &n); //char的数组算,当字符大于'9'后会出问题
int a[10+1][2*10+1] = { 0 }; //画图后发现:行=n+1,因为和最后一行的下一行无关
Init(a, n); // 列=2*n+1 ,多创建两行列
set(a, n);
print(a, n);
return 0;
}
把我给整不会了,但是没办法啊大佬亲自来教不会也得会