0

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。

4

2 回答 2

2

考虑矩阵的外部“外壳”。给定大小n (在您的示例中为 5)和s的起始值(在您的示例中为 1) ,四个顶点的值的总和是

s + (s + (n-1)) + (s + (n-1)*2) + (s + (n-1)*3) = 4*s + (n - 1)*6

这同样适用于内部值,一旦更新ns

s = s + 4 * (n - 1)
n = n - 2

如果n小于 2,那么我们要么有中心元素,要么什么都没有(n是偶数)。

于 2019-04-02T13:44:36.580 回答
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

于 2021-05-14T05:44:58.947 回答