在尝试用C语言输出杨辉三角形的前十行时,我遇到了一个问题。我的程序输出了许多零,而我期望得到的是杨辉三角形。下面是我的初始代码:
#include
int main() {
int a[10][11];
int x,y;
for (x=0;x<10;x++) {
for (y=0;y<11;y++) {
a[x][y]=0;
}
}
a[0][1]=1;
printf("%d\n",a[0][1]);
for (x=1;x<10;x++) {
for(y=1;y<=x+1;y++) {
a[x][y]=a[x-1][y-1]+a[x-1][y];
printf("%d",a[x][y]);
if (a[x][y]<10) printf(" ");
else if (a[x][y]>9&&a[x][y]<100) printf(" ");
else printf(" ");
}
printf("\n");
}
}
经过对比,我发现了一个问题。在初始设置时,我将所有元素初始化为零。然而,正确的方法应该是直接在循环中计算每个位置的值,而不是在循环之前将所有元素设置为零。我尝试了另一种方法:
#include
void main() {
int a[10][10]={{1},{1},{1},{1},{1},{1},{1},{1},{1},{1}};
int i,j;
for(i=0;i<=9;i++) {
for(j=0;j<=i;j++) {
printf("%d ",a[i][j]);
if(i==j) printf("\n");
a[i+1][j+1]=a[i][j]+a[i][j+1];
/*
if(i==j) a[i][j]=1;
*/
}
printf("\n");
}
}
这样修改后,程序可以正确地生成杨辉三角形的前十行,而无需所有元素初始为零。这说明了正确的初始化对于某些算法的重要性。