让n = 5,然后为矩阵
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
那么对角元素的总和是:
=1+17+25+21+9+5+19+23+13
n = 15的总和?
一种方法是制作螺旋矩阵,然后通过循环得到答案,但是它的时间和空间复杂度很大。
赞这个https://www.geeksforgeeks.org/sum-diagonals-spiral-odd-order-square-matrix/ 但是这里的问题是从中心开始1。
答案 0 :(得分:1)
考虑矩阵的外部“外壳”。给定的大小为 n (示例中为5),起始值为 s (示例中为1),四个顶点的值之和为>
s +(s +(n-1))+(s +(n-1)* 2)+(s +(n-1)* 3)= 4 * s +(n -1)* 6
内部值也一样,一旦更新 n 和 s :
s = s + 4 *(n-1)
n = n-2
如果 n 小于2,那么,要么我们有中心元素,要么什么都没有( n 是偶数)。
答案 1 :(得分:0)
根据 Bob_ 的回答,这是 OP 要求的 CPP 中的递归代码
int shellcalc(int n,int s){
if(n==1)
return s;
else if(n==0)
return 0;
else
{
int sum=4*s+(n-1)*6;
int snew=s+4*(n-1);
int nnew=n-2;
return sum+shellcalc(nnew,snew);
}
}
在这里试试https://rextester.com/FLJD46264
Python - https://rextester.com/MDMV32855