杭电acm2032 我把数组改成a[31][31]就可以,为什么a[30][30]就格式错误呢
http://acm.hdu.edu.cn/showproblem.php?pid=2032
输入数据包含多个测试实例,每个测试实例的输入只包含一个正整数n(1<=n<=30),表示将要输出的杨辉三角的层数。
#include<stdio.h>
int main(){
int i,j,n;
int a[30][30]={0,0,0};
while(scanf("%d",&n)==1){
for(i=0;i<n;i++){
a[i][0]=1;
}
for(i=1;i<n;i++)
for(j=1;j<n;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=0;i<n;i++)
for(j=0;j<n;j++){
if(a[i][j]!=0 && a[i][j+1]!=0)
printf("%d ",a[i][j]);
else if(a[i][j]!=0 && a[i][j+1]==0)
printf("%d\n",a[i][j]);
}
printf("\n");
}
return 0;
}
[解决办法]
当输入为30时,LZ程序在访问 a[i][j+1]时实际用到了 a[29][30],因此至少要声明int a[30][31]。
如果要声明int a[30][30],可如下修改:
#include<stdio.h>
int main(){
int i,j,n;
int a[30][30]={0,0,0};
while(scanf("%d",&n)==1){
for(i=0;i<n;i++){
a[i][0]=1;
}
for(i=1;i<n;i++)
for(j=1;j<n;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=0;i<n;i++)
/*
for(j=0;j<n;j++){
if(a[i][j]!=0 && a[i][j+1]!=0)
printf("%d ",a[i][j]);
else if(a[i][j]!=0 && a[i][j+1]==0)
printf("%d\n",a[i][j]);
*/
for(j=0;j<=i;j++){
printf("%d%c", a[i][j], j<i?' ':'\n');
}
printf("\n");
}
return 0;
}