【问题标题】:Access diagonal elements in a 2D array stored in a 1D array访问存储在一维数组中的二维数组中的对角线元素
【发布时间】:2017-11-07 16:23:24
【问题描述】:

假设我的二维数组是:

int a[4][4] = {
               1,0,0,0,
               0,1,0,0,
               0,0,1,0,
               0,0,0,1
              };

假设它存储在一维数组中为:

int b[16]={1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1};

一般来说,假设a 的大小为m x n,而b 的大小为mn。 使用单个 for loop 我希望能够访问所有对角线元素,即输出应该是 1 1 1 1。

我了解A[i][j] = B[i*n+j];,但如果我只使用一个for循环,我就没有j index

任何帮助将不胜感激。

编辑:

注意让 m=n 用于所有实际目的。我正在使用的界面需要两个单独的变量来表示行和列的大小。但我只使用方阵。

【问题讨论】:

  • 在对角线i=j。顺便说一句,m != n 时对角线是什么?

标签: c arrays matrix


【解决方案1】:

二维数组很简单。

for(int i=0; i<4; i++)
   printf("%d", a[i][i]);

而对于一维数组来说,也不是什么难事。

for(int i=0; i<16; i=i+5)
   printf("%d", b[i]);

【讨论】:

  • 有问题的数组是一维的
  • 编辑了我的答案以包括一维数组。
  • 而且还是二维数组
  • @FedericoklezCulloca,不是。
  • 你仍然使用两个索引来访问它,什么给出?
【解决方案2】:

如果您知道您的二维数组是一个完美的正方形(即行数与列数完全相同),则不需要j 索引:

作为二维数组:

for(i = 0; i < height; i++)
{
    printf("%d\n", array[i][i];
}

作为一维数组:

for(i = 0; i < height; i++)
{
    printf("%d\n", array[i*height+i]);
}

【讨论】:

    【解决方案3】:

    你只需要考虑列数。

    #define COLUMNS 4
    #define ROWS 4
    
    b[16]={1,0,0,0,
           0,1,0,0,
           0,0,1,0,
           0,0,0,1};
    
    int i = 0;
    for(; i < ROWS; i++ ){
      printf("%d\t",b[COLUMNS*i+i]);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-24
      • 1970-01-01
      • 2017-10-11
      • 1970-01-01
      • 2011-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多