元素在矩阵内的对角线交叉点的北,南,东,西

时间:2016-12-02 18:07:42

标签: c matrix diagonal

我想知道除了对角线之外矩阵的4个主要区域的条件。

例如,在以下矩阵

A=[1,2,3,4,5;
   6,7,8,9,10;
   11,12,13,14,15;
   16,17,18,19,20;
   21,22,23,24,25;] 

北侧的元素是2,3,4,8;从西边将是6,11,16,12;从东侧10,15,20,14;从南侧22,23,24,18;

我所知道的是北部可以写成:

for(i=0;i<n;i++)
    for(j=i+1;j<n-i-1;j++)
        printf("%d",v[i][j])

对于其他地区,我被困住了。任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

假设我们将第一个索引i解释为行索引,将第二个索引j解释为列索引。这与数学符号中通常的索引顺序一致。 C绝不需要这样的解释,但我们必须选择一个解释罗盘方向区域标签的惯例,而且这个标准非常自然。

主对角线上元素v[i][j]的索引满足i == j。向上移动矩阵(到较小的行数)会减少i,因此主对角线上方的矩阵元素会满足i < j。同样,主对角线下方的元素满足i > j

次要对角线上的元素索引满足i == n - 1 - j(假设从零开始索引)。同样,向上移动减少i向下移动会增加它,因此高于此对角线的元素满足i < n - 1 - j,低于它的元素满足i > n - 1 - j

四个感兴趣区域中的每一个区域的特征在于它是在这些对角线之上还是之下,因此每个区域的折射率条件是对角线上方或下方的相应条件的组合。例如,西部区域位于主对角线下方且位于次要对角线上方,因此其索引条件为i > j && i < n - 1 - j。其他区域的指数条件可以类似地确定。

答案 1 :(得分:0)

我想通了,非常感谢John解释找到所述元素的过程和Quirk的建议。

问题中提到了北部的条件。

南部的条件是:

sessions/new

对于东部,代码是:

for(i=0;i<n;i++)
    for(j=i+1;j<n-i-1;j++)
        printf("%d ",v[n-i-1][j]);

对于西部,代码是:

for(i=0;i<n;i++)
    for(j=i+1;j<n-i-1;j++)
        printf("%d ",v[j][n-i-1]);

每个人都有美好的一天。