zoukankan      html  css  js  c++  java
  • NOI题库 09:图像旋转翻转变换

     NOI题库开始的题,也是略水,当然也是大水,所以彼此彼此
    

    09:图像旋转翻转变换
    总时间限制: 1000ms 内存限制: 65536kB
    描述
    给定m行n列的图像各像素点灰度值,对其依次进行一系列操作后,求最终图像。
    其中,可能的操作及对应字符有如下四种:
    A:顺时针旋转90度;
    B:逆时针旋转90度;
    C:左右翻转;
    D:上下翻转。
    输入
    第一行包含两个正整数m和n,表示图像的行数和列数,中间用单个空格隔开。1 <= m <= 100, 1 <= n <= 100。
    接下来m行,每行n个整数,表示图像中每个像素点的灰度值,相邻两个数之间用单个空格隔开。灰度值范围在0到255之间。
    接下来一行,包含由A、B、C、D组成的字符串s,表示需要按顺序执行的操作序列。s的长度在1到100之间。
    输出
    m’行,每行包含n’个整数,为最终图像各像素点的灰度值。其中m’为最终图像的行数,n’为最终图像的列数。相邻两个整数之间用单个空格隔开。
    样例输入
    2 3
    10 0 10
    100 100 10
    AC
    样例输出
    10 100
    0 100
    10 10

      我只想吐槽,由于最近变量全都设为全局变量了,这次傻逼了,忘了把过程中的变量在过程中重新定义,使得多调试了好多次。。以此为鉴!
    

    代码:

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    int d[110][110]={0},d1[110][110]={0};//d1位控制变换用的
    int n,m;
    int i,j;
    char work[200];
    int k;
    
    void A()//操作A
    {
        int i,j;
        memset(d,0,sizeof(d));
        for (i=1;i<=m;i++)
            for (j=1;j<=n;j++)
                    d[j][m-i+1]=d1[i][j];
        int temp=m;
        m=n;
        n=temp;
        memset(d1,0,sizeof(d1));
        for (i=1;i<=m;i++)
            for (j=1;j<=n;j++)
                    d1[i][j]=d[i][j];
        //cout<<"A is right"<<endl;         
    }
    
    void B()//操作B,逆时针旋转90°就相当于顺时针旋转270°
    {
        A();
        A();
        A();
        //cout<<"B is right"<<endl;     
    }
    
    void C()//操作C
    {
        int i,j;
        for (i=1;i<=m;i++)
            for (j=1;j<=n;j++)
                    d[i][j]=d1[i][n-j+1];
        memset(d1,0,sizeof(d1));
        for (i=1;i<=m;i++)
            for (j=1;j<=n;j++)
                    d1[i][j]=d[i][j];
    
        //cout<<"C is right"<<endl;     
    } 
    
    void D()//操作D
    {
        int i,j;
        for (i=1;i<=m;i++)
            for (j=1;j<=n;j++)
                    d[i][j]=d1[m-i+1][j];
        memset(d1,0,sizeof(d1));
        for (i=1;i<=m;i++)
            for (j=1;j<=n;j++)
                    d1[i][j]=d[i][j];
        //cout<<"D is right"<<endl;     
    }
    
    int main()
    {
        scanf("%d%d",&m,&n);
        for (i=1;i<=m;i++)
            for (j=1;j<=n;j++)
                {
                    scanf("%d",&d[i][j]);
                    d1[i][j]=d[i][j];
                }
            cin>>work;
            int k=strlen(work);
            //cout<<k;
            for (i=0;i<k;i++)   
              { 
                if (work[i]=='A')
                    A();
                if (work[i]=='B')
                    B();
                if (work[i]=='C')
                    C();
                if (work[i]=='D')
                    D();
              }
        for (i=1;i<=m;i++)
            {
                for (j=1;j<=n;j++)
                    printf("%d ",d[i][j]);
                printf("
    ");
            }
      return 0;
    }    
    ——It's a lonely path. Don't make it any lonelier than it has to be.
  • 相关阅读:
    3. 算法分析
    4. union-find算法
    1.基础编程模型和数据抽象
    2. 背包,队列和栈
    .NET Core 单元测试
    ASP.NET Core Web API
    ASP.NET Core MVC 之区域(Area)
    ASP.NET Core MVC 之依赖注入 Controller
    ASP.NET Core MVC 之依赖注入 View
    微服务架构学习与思考(04):微服务技术体系
  • 原文地址:https://www.cnblogs.com/DaD3zZ-Beyonder/p/5346274.html
Copyright © 2011-2022 走看看