微光·浅月
2020-04-05 18:10
采纳率: 100%
浏览 187

这条代码错在哪?求解?

图像变换
题目描述
位图bitmap,也叫做点阵图,栅格图像,像素图。如上图所示,是由n*m个点组成,每个点显示一种颜色就形成了图形,最小单位是像素。一个点的颜色一般用一个整数表示,因此一幅点阵图我们常常用一个n*m的矩阵保存,矩阵的元素值代表该点的颜色。

给定一个n行m列的图像各像素点的颜色值,对该图像有4种操作: 1)顺时针旋转90度;2)逆时针旋转90度;3)水平翻转;4)垂直翻转。对其有一系列操作,输出经过一系列操作后新图像各点的颜色值

输入格式
第一行 三个整数n、m、p分别表示行数、列数、操作次数(1<=n<=1600;1<=m<=1200;1<=p<=1000)

第2至第n+1行,每行m个整数,每个整数用一个空格隔开

第n+2行,有p个大写字母_(A 表示顺时针旋转90度 ;B表示逆时针旋转90度;C表示水平翻转;D表示垂直翻转)_表示操作的种类,每个字母由一个空格隔开。

输出格式
n行,每行m个整数,每个整数由一个空格隔开

输入输出样例

输入样例
3 3 1
1 2 3
4 5 6
7 8 9
A

输出样例
7 4 1
8 5 2
9 6 3

#include<bits/stdc++.h>
using namespace std;
int n,m,p;
int a[1600][1200];
char b[1000];
int c[1600][1200];
int main()
{
    cin>>n>>m>>p;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>a[i][j];
        }   
    }
    for(int k=1;k<=p;k++){
        cin>>b[k];
    }
    for(int k=1;k<=p;k++){
        if(b[k]=='A'){
            for(int i=1;i<=n;i++){
                for(int j=1;j<=m;j++){
                    c[j][m+1-i]=a[i][j];
                }   
            }
        }
        if(b[k]=='B'){
            for(int i=1;i<=n;i++){
                for(int j=1;j<=m;j++){
                    c[n-j+1][i]=a[i][j];
                }
            }
        }
        if(b[k]=='C'){
            for(int i=1;i<=n;i++){
                for(int j=1;j<=m;j++){
                    c[i][m-j+1]=a[i][j];
                }   
            }
        }
        if(b[k]=='D'){
            for(int i=1;i<=n;i++){
                for(int j=1;j<=m;j++){
                    c[n-i+1][j]=a[i][j];
                }   
            }
        }
    }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                cout<<c[i][j]<<" ";
            }
            cout<<endl; 
        }
    return 0;
}
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • threenewbee 2020-04-05 23:12
    已采纳

    你的程序问题很多

    首先,作为程序员,数组下标从0开始,你从1开始,说明你连基本的编程习惯都是错的。

    其次,你根本没有把题目搞清楚,比如说向左旋转90度,那么矩阵的形状就不是m*n了,而是n*m了,而且你把转换的结果放在c里面,也没有更新回a
    最后,你的转换本身也没有写对。

    打赏 评论

相关推荐 更多相似问题