C-矩阵内的对角线交叉路口的北部,南,东,东,以西



我想知道矩阵以外的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])

对于其他领域,我被困。谁能帮我?

假设我们将第一个索引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。可以类似地确定其他区域的索引条件。

我弄清楚了,非常感谢约翰解释了该建议的元素和怪癖的过程。

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

南部的条件是:

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]);

对于西部部分,代码为:

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

祝大家有美好的一天。

最新更新