Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在c+中从左、右、顶部和底部查找岛+;在矩阵中_C++_Arrays_Matrix - Fatal编程技术网

C++ 在c+中从左、右、顶部和底部查找岛+;在矩阵中

C++ 在c+中从左、右、顶部和底部查找岛+;在矩阵中,c++,arrays,matrix,C++,Arrays,Matrix,我已经试了一段时间了,但我想不出来。 我必须制作一个程序,在矩阵中,它找到顶部、底部、左侧和右侧的数字并打印出来。我在打印底部、左侧和右侧数字的地方制作了它,但不知道如何打印顶部数字 #include <iostream> using namespace std; int main() { int a[10][10],i,j,m,n,zb,zb2,zb3,zb4; cin>>m>>n; for(i=0;i<n;i++

我已经试了一段时间了,但我想不出来。 我必须制作一个程序,在矩阵中,它找到顶部、底部、左侧和右侧的数字并打印出来。我在打印底部、左侧和右侧数字的地方制作了它,但不知道如何打印顶部数字

#include <iostream>

using namespace std;

int main()
{
    int a[10][10],i,j,m,n,zb,zb2,zb3,zb4;
    cin>>m>>n;
    
    for(i=0;i<n;i++){
        for(j=0;j<m;j++){
            cin>>a[i][j];
        }    
    }
    
    for(i=0;i<n;i++){
        for(j=0;j<m;j++){
            if(i+j<m-1){
                zb=a[i][j]; // first
            }
            if(i+j<m+1){
                zb2=a[i][j]; // second
            }
            if(i<j){
                zb3=a[i][j]; // third
            }        
            if(n+m<j+1){
                zb4=a[i][j]; // fourth
            }  
        }    
    }
   
    

    cout<<zb<<endl;
    cout<<zb2<<endl;
    cout<<zb3<<endl;
    cout<<zb4<<endl;

    return 0;
}

#包括
使用名称空间std;
int main()
{
inta[10][10],i,j,m,n,zb,zb2,zb3,zb4;
cin>>m>>n;
对于(i=0;ia[i][j];
}    
}

对于(i=0;iHmmm),中点定义为:
长度>>1
(长度+1)/2

最右边的列的索引是
(列数量)-1

最下面一行的索引是
(行数量)-1

因此,地点如下:

const unsigned int mid_column = MAXIMUM_COLUMNS / 2;
const unsigned int mid_row    = MAXIMUM_ROWS / 2;
std::cout << matrix[0][mid_column] << "\n"
          << matrix[mid_row][MAXIMUM_COLUMNS - 1] << "\n"
          << matrix[MAXIMUM_ROWS - 1][mid_column] << "\n"
          << matrix[mid_row][0] << "\n";
const unsigned int mid_column=最大列数/2;
常量无符号整数中间行=最大行/2;

std::coutfor
-循环的
是非常不必要的。如果您现在已经知道了列数和行数,那么可以很容易地计算出中点:

#include <iostream>

const unsigned int maxn = 10;
int a[maxn][maxn];

int main()
{
    int row,col;
    std::cin>>row>>col;

    for(int i = 0; i < row; i++)
    {
        for(int j = 0; j < col; j++) { std::cin>>a[i][j]; }
    }

    int midcol = col/2;
    int midrow = row/2;

    std::cout << "Top row : " << a[0][midcol];
    if (col%2==0) { std::cout << " " << a[0][midcol-1]; }
    std::cout << "\n";

    std::cout << "Bottom row : " << a[row-1][midcol];
    if (col%2==0) { std::cout << " " << a[row-1][midcol-1]; }
    std::cout << "\n";

    std::cout << "Left column: " << a[midrow][0];
    if (row%2==0) { std::cout << " " << a[midrow-1][0]; }
    std::cout << "\n";

    std::cout << "Right column: " << a[midrow][col-1];
    if (row%2==0) { std::cout << " " << a[midrow-1][col-1]; }
    std::cout << "\n";

    return 0;
}
示例(2):

例(3):

还应注意的是:

  • 正如@ThomasMatthews所提到的,您可以使用
    #define
    const
    变量来声明阵列容量。这样,当您更改矩阵的大小时,您只需更改1个变量

  • 不要像
    i,j,m,n,zb,zb2,zb3,zb4
    那样声明一组只有一个字符或没有任何意义的变量。少数变量是可以的,但当代码变长时,拥有更多变量会导致大量调试问题。此外,在程序员中,使用
    i,j,k
    作为循环中的迭代器变量有些常见(我自己经常这样做),作为一个初学者,他们会给新手带来很多困惑,例如:

for(int i=0;i

提示:使用
#定义数组容量的
或常量。然后,您可以在其他地方使用它们。更改数组容量时,您只需要修改一个位置。例如:
const unsigned int MAX_ROWS=10U;
。那么您想打印四个角或四个边吗?从代码中,确实不清楚您想要什么这样做。一个好的方法不会依赖于这样的用户输入。将
A
设置为显示错误的值。也许可以简化为“顶部”和“底部”计算(一个有效,一个无效)。告诉我们预期和实际输出是什么。奖金:告诉我们为什么您认为您的程序应该工作。@silverfox我想打印每一面的中间部分,如示例所示。它们周围有红色的部分!对于列数偶数或行数偶数的矩阵,您想打印什么?
3 3
1 2 3
4 5 6
7 8 9
Top row : 2
Bottom row : 8
Left column: 4
Right column: 6
4 4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
Top row : 3 2
Bottom row : 15 14
Left column: 9 5
Right column: 12 8
3 4
1 2 3 4
5 6 7 8
9 10 11 12
Top row : 3 2
Bottom row : 11 10
Left column: 5
Right column: 8
for (int i = 0; i < n; i++)
{
    for (int j = 0; j < m; i++) //mistake here
    {

    }
}