//修改了一下,如下参考一下吧:
#include
#define MAX 100 //定宽瞎义一个最大的范围
void main()
{
int a[MAX][MAX],n,i,j,sum=0; //原来这里数组定义不正确
printf("please input the n:");
scanf("%d",&n);
for(i=0;i
for(j=0;j
printf ("shuru a[%d][%d] zhi:",i,j);
scanf("%d",&a[i][j]);
}
}
for(i=0;i
for(j=0;j
sum+=a[i][j];
}
//这里不用减,因为没有将a[n/2][n/2]加两次
printf("sum = %d\n",sum);
}
//修改了一下,如下参考喊蚂一下吧:
#include
#define
MAX
100
//定义一个最大的范围
void
main()
{
int
a[MAX][MAX],n,i,j,sum=0;
//原来这里数组定义不正袜渗宴确
printf("please
input
the
n:");
scanf("%d",&n);
for(i=0;i
for(j=0;j
printf
("shuru
a[%d][%d]
zhi:",i,j);
scanf("%d",&a[i][j]);
}
}
for(i=0;i
for(j=0;j
//你这里原来有一个等号
sum+=a[i][j];
}
//这里不用减,因为没有将a[n/2][n/2]加两次告银
printf("sum
=
%d\n",sum);
}
左对角线元素求和直接把a[i][i]相加就行了吧,右对角线a[n-i][i]相加
测试用例,时间复唯凯杂度O(n),空间销山祥复杂度O(1)
public static void main(String[] args) {
int[] res = diagonalAnd(new int[][]{{1, 2, 3}, {1, 1, 1}, {3, 2, 1}});
System.out.println(Arrays.toString(res));
}
public static int[] diagonalAnd(int[][] matrix){
int res1 = 0;//左上角-->亏搏右下角
int res2 = 0;//右上角-->左下角
int len = matrix.length;
for (int i = 0; i < len; i++) {
int n1 = matrix[i][i];
int n2 = matrix[i][len-i-1];
res1 += n1;
res2 += n2;
}
return new int[]{res1,res2};
啥?你搞了半天的代码编译都没通过。。。