11.12 acm培訓 Problem C: 映像旋轉翻轉變換__acm訓練

來源:互聯網
上載者:User
Description

給定m行n列的映像各像素點灰階值,對其依次進行一系列操作後,求最終映像。

其中,可能的操作及對應字元有如下四種:

A:順時針旋轉90度;

B:逆時針旋轉90度;

C:左右翻轉;

D:上下翻轉。 Input

多組輸入,至EOF結束。

第一行包含兩個正整數m和n,表示映像的行數和列數,中間用單個空格隔開。1 <= m <= 100, 1 <= n <= 100。
接下來m行,每行n個整數,表示映像中每個像素點的灰階值,相鄰兩個數之間用單個空格隔開。灰階值範圍在0到255之間。
接下來一行,包含由A、B、C、D組成的字串s,表示需要按順序執行的操作序列。s的長度在1到100之間。 Output

每組m'行,每行包含n'個整數,為最終映像各像素點的灰階值。其中m'為最終映像的行數,n'為最終映像的列數。相鄰兩個整數之間用單個空格隔開。 Sample Input 2 310 0 10100 100 10AC Sample Output

10 1000 10010 10


思路:

定義兩個二維數組,一個用來操作,一個用來儲存變化後的數組,注意每次操作時清空無用數組,防止發生資料重疊。

情況A的轉置比較難想,需要用q1[j][m-1-i]=q[i][j];這樣的代碼來處理。

情況B可以由A操作三次完成。簡化了操作。

情況CD略。

其中第一次提交忘了聲明ACD。然而codeblocks並沒有提醒。血崩。

代碼:

#include <stdio.h>#include <stdlib.h>#include <string.h>int m,n;char s[100];int q[100][100]= {0};int q1[100][100]= {0};int i,j,k;int main(){    void A();    void C();    void D();//不要忘了聲明。。。。    while(scanf("%d%d",&m,&n)!=EOF)    {        for(i=0; i<m; i++)        {            for(j=0; j<n; j++)                scanf("%d",&q[i][j]);        }        scanf("%s",s);        for(k=0; k<strlen(s); k++)        {            if(s[k]=='A')            {                A();            }            if(s[k]=='B')            {                A();                A();                A();            }            if(s[k]=='C')            {                C();            }            if(s[k]=='D')            {                D();            }        }        for(i=0; i<m; i++)        {            for(j=0; j<n; j++)            {                if(j==0)                    printf("%d",q[i][j]);                else                    printf(" %d",q[i][j]);            }            printf("\n");        }    }    return 0;}void A(){    memset(q1,0,sizeof(q1));    for(i=0; i<m; i++)    {        for(j=0; j<n; j++)        {            q1[j][m-1-i]=q[i][j];        }    }    int temp=m;    m=n;    n=temp;    memset(q,0,sizeof(q));    for(i=0; i<m; i++)        for(j=0; j<n; j++)            q[i][j]=q1[i][j];}void C(){    memset(q1,0,sizeof(q1));    for (i=0; i<m; i++)    {        for (j=0; j<n; j++)        {            q1[i][j]=q[i][n-j-1];        }    }    memset(q,0,sizeof(q));    for (i=0; i<m; i++)        for (j=0; j<n; j++)            q[i][j]=q1[i][j];}void D(){    memset(q1,0,sizeof(q1));    for (i=0; i<m; i++)    {        for (j=0; j<n; j++)        {            q1[i][j]=q[m-1-i][j];        }    }    memset(q,0,sizeof(q));    for (i=0; i<m; i++)        for (j=0; j<n; j++)            q[i][j]=q1[i][j];}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.