在一行上打印矩阵

时间:2012-10-13 11:15:29

标签: c++ c matrix

我有这个矩阵:

1 2 3 4 5
6 7 8 9 A
B C D E F
0 1 2 3 4

我希望它在一行中打印如下:

1 6 2 B 7 3 0 C 8 4 1 D 9 5 2 E A 3 F 4.

最简单的方法是如何做到的?

5 个答案:

答案 0 :(得分:1)

使用嵌套循环。 外环超过(0,0)

的距离

内部循环遍历i和j的所有有效组合,总计到距离。

答案 1 :(得分:1)

#include <iostream>

int main(int argc, char **argv)
{
    char m[4][5] = { { '1', '2', '3', '4', '5' },
             { '6', '7', '8', '9', 'A' },
             { 'B', 'C', 'D', 'E', 'F' },
             { '0', '1', '2', '3', '4' } };

    for (int i = 0; i <= 3; ++i) {
        for (int j = 0; j <= i; ++j) {
            std::cout << m[i - j][j] << " ";
        }
    }

    for (int i = 4; i <= 7; ++i) {
        for (int j = i - 3; j <= 4; ++j) {
            std::cout << m[i - j][j] << " ";
        }
    }

    std::cout << std::endl;
    return 0;
}

答案 2 :(得分:0)

如果矩阵以如下方式存储在数组中:

#include <stdio.h> 
int main(void) { 
  char matrix[4][5] = {{'1','2','3','4','5'},
                       {'6','7','8','9','A'},
                       {'B','C','D','E','F'},
                       {'0','1','2','3','4'}};
  int cols = 5;
  int rows = 4;
  int i = 0;
  for( i = 0; i < cols + rows -2 ; i++){
    int j = 0;
    while(j <= i){
        int k = i-j;
        if(k < rows && j < cols){
            printf("%c ",matrix[k][j]);
        }
        j++;
    }
  }
} 

我只是从0到行和列的索引总数(在这种情况下从0到7) 对于每个索引总值,打印值与列和行的总和等于当前总索引,如果索引是可用的(小于列和行的索引),则打印它,否则转义。 例如:

0 - 00
1 - 10 01
2 - 20 11 02

顺便说一下,似乎需要比其他人更多的循环

答案 3 :(得分:0)

我建议矩阵的vector<vector<char> >表示(如果我假设你在每个单元格中存储字符)。一个重要的观察是,对于每个对角线,你有i和j指数的总和是一个常数,对于对角线,这个总和增加一。

注意到这一点后,你在x坐标上的和和内循环上做了一个外循环。小心不要掉出矩阵! 现在,打印矩阵的最简单的c ++方法是:

vector<vector<char> > a;
for(unsigned sum = 0;  sum < a.size() + a[0].size(); ++sum) {
  for (unsigned j = 0; j <= sum && j < a[0].size(); ++j) {
    unsigned i = sum - j;
    if (i >= a.size()) {
      continue;
    }
    cout << a[i][j] << " ";
  }
}

可以通过更改起始值来优化j上的循环(以便继续条件永远不会成立),但代码将更难理解。我没有故意修复的另一个问题是,即使在最后一个元素之后也会打印出空白。这是另一个需要添加的检查。

希望这有帮助。

答案 4 :(得分:-1)

for( int i = 0; i < matrix.cx; i++ ) {
    for( int j = 0; j < matrix.cy; j++ ) {
        std::cout << matrix[i][j] << ' ';
    }
    // comment following line to make matrix printed in one line
    std::cout << std::endl;
}