打印该矩阵的if语句是什么

时间:2018-12-20 13:46:41

标签: c++ arrays matrix

我正在传递一个矩阵作为输入(c ++),我想从矩阵的外部打印出数字,即矩阵的“空心正方形元素”。我知道该怎么做,这就是if语句:if(i==0 || i==n || j==0 || j==n)。我想打印矩阵的下一帧,因为使用此if语句,它将打印矩阵的外框。我要打印所有下一帧。

我已经使用if(i==0 || i==n || j==0 || j==n)在矩阵的外部进行了操作,但是正如我所说的那样,它会打印矩阵的第一帧,而我想打印下一帧。

例如,给定矩阵

1 2 3 4
4 3 2 1
5 6 7 8
8 7 6 5

它应该打印:

3 2
6 7 

所以这是“第二”帧,它是矩阵的内部。第一帧应该是:

1 2 3 4
4     1
5     8
8 7 6 5

那么,如何打印下一帧?

2 个答案:

答案 0 :(得分:5)

假设您的矩阵的大小为n+1 x n+1,我认为以下条件适用于任何大小的正方形矩阵:

if(((i==1 || i==n-1) && (j>0 && j<n)) || ((i>0 && i<n) && (j==1 || j==n-1)))

通常,可以在以下情况下打印第k帧:

if(((i==k || i==n-k) && (j>=k && j<=n-k)) || ((i>=k && i<=n-k) && (j==k || j==n-k)))

对于k = 0,此条件减少为第一个if(i==0||i==n||j==0||j==n)

答案 1 :(得分:1)

为了打印所有东西,但外框,只需对当前的布尔值求反即可:

if(!(i==0 || i==n || j==0 || j==n))

根据De Morgan的定律,它转换为:

if( i != 0 && i != n && j != 0 && j != n)

如果要遍历矩阵的不同框架,则需要for循环:

for(int depth = 0; depth < mat.row()/2 < depth++) if(((i==depth || i==n-depth) && (j>depth-1 && j<n - depth )) || ((i>depth -1 && i<n - depth ) && (j==depth || j==n-depth)))