计蒜客题库中的矩阵翻转(C++)

晓萌最近在做一个翻转图片的应用,你可能也知道,图片其实是由一个个的点组成的。于是,晓萌想先做一个可以翻转矩阵的程序,来解决他问题的核心部分。

输入格式

输入第一行包括由空格分开的整数 M,N,T(0 < N,M < 200)M,N,T(0<N,M<200)TT 的值为 00 或 11。其中 MM 和 NN 分别表示待处理矩阵的行数与列数,TT 为 00 时表示左右翻转,为 11 时表示上下翻转。

之后的 MM 行,每行包括由空格分隔的 NN 个整数,依次为输入矩阵的每一行的数据。

输出格式

输出包括 MM 行 NN 列,每个数字之间用一个空格分隔,每一行行末均有一个空格,表示的是按照要求翻转后的矩阵。

样例输入

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

样例输出

3 4 5 6 
9 0 1 2 
5 6 7 8 
1 2 3 4 
其实这道题目不是很难,因为没有运用什么算法,不过,要考虑细心一些,比如矩阵是的行数或者列数数的奇偶关系我,因为行数列数是奇数和偶数翻转后的结果是不一样的,题目提示我们输入行数和列数以及矩阵的翻转状态(0表示左右翻转,1表示上下翻转),如果行数和列数是偶数那么他们就不需要依靠某一列某一行为对称轴翻转了,若是奇数的话,需要将行数或者列数/2的那一列为中心进行翻转,所以该列或者该行的元素不要改变,所以有这几种情况容易被忽视,看一下源代码吧:           #include<iostream>
using namespace std;


int main()
{
int a[200][200];
int b[200][200];
int M,N,T;
cin>>M>>N>>T;
for(int i=0;i<M;i++){
for(int j=0;j<N;j++)
{
cin>>a[i][j];
b[i][j]=a[i][j];
}
}
// cout<<endl;
if(T==0)  //表示对矩阵进行左右翻转 
{
       if(N%2==0)  //判断矩阵的对称性 
       {
          for(int i=0;i<M;i++){
          for(int j=0;j<N;j++){
          b[i][j]=a[i][N-j-1];
          }
          }
          for(int i=0;i<M;i++){
          for(int j=0;j<N;j++){
          cout<<b[i][j]<<" ";
          }
          cout<<endl;
          }
       }
       else
       {
           for(int i=0;i<M;i++){
            for(int j=0;j<N;j++){
            if(j==N/2){
            continue;
            }
            else
            {
            b[i][j]=a[i][N-j-1];
            }
            }
           }
            for(int i=0;i<M;i++){
          for(int j=0;j<N;j++){
          cout<<b[i][j]<<" ";
          }
          cout<<endl;
          }
       }
    } 
if(T==1)   //对矩阵进行上下翻转 
{
if(M%2==0)
{
for(int j=0;j<N;j++){
for(int i=0;i<M;i++){
b[i][j]=a[M-1-i][j];
}
}
for(int i=0;i<M;i++){
          for(int j=0;j<N;j++){
          cout<<b[i][j]<<" ";
          }
          cout<<endl;
          }
}
else
{
for(int j=0;j<N;j++){
for(int i=0;i<M;i++){
    if(i==M/2)
    {
    continue;
    }
    else{
      b[i][j]=a[M-1-i][j];
    }


}
}
for(int i=0;i<M;i++){
          for(int j=0;j<N;j++){
          cout<<b[i][j]<<" ";
          }
          cout<<endl;
          }
    
}
}
return 0;
}

猜你喜欢

转载自blog.csdn.net/lytwy123/article/details/80791081