欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

codevs1287方块转换(数学转换)

程序员文章站 2024-01-13 19:43:34
...

题目描述 Description

一块N x N1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案。写一个程序来找出将原始
图案按照以下列转换方法转换成新图案的最小方式:
#1:转90度:图案按顺时针转90度。
#2:转180度:图案按顺时针转180度。
#3:转270度:图案按顺时针转270度。
#4:反射:图案在水平方向翻转(形成原图案的镜像)。
#5:组合:图案在水平方向翻转,然后按照#1-#3之一转换。
#6:不改变:原图案不改变。
#7:无效转换:无法用以上方法得到新图案。
如果有多种可用的转换方法,请选择序号最小的那个。

输入描述 Input Description
第一行: 单独的一个整数N
第二行到第N+1行: N行每行N个字符(不是“@”就是“-”);这是转换前的正方形。
N+2行到第2*N+1行: N行每行N个字符(不是“@”就是“-”);这是转换后的正方形。
输出描述 Output Description

单独的一行包括1到7之间的一个数字(在上文已描述)表明需要将转换前的正方形变为转换后的正方形的
转换方法。

样例输入 Sample Input
样例输出 Sample Output

1

数据范围及提示 Data Size & Hint

#include <iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;
    char c1[n][n],c2[n][n];
    int a[9];
    for(int i=0;i<9;i++) a[i]=0;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            cin>>c1[i][j];
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            cin>>c2[i][j];
            
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
        {
            if(c2[i][j]==c1[j][n-1-i]) a[1]++;//顺90 
            if(c2[i][j]==c1[n-1-i][n-1-j]) a[2]++;//顺180 
            if(c2[i][j]==c1[n-1-j][i]) a[3]++;//顺270 
            if(c2[i][j]==c1[i][n-1-j]) a[4]++;//反射 
            
            if(c2[i][n-1-j]==c1[j][n-1-i]) a[5]++;
            if(c2[i][n-1-j]==c1[n-1-i][n-1-j]) a[6]++;
            
            if(c2[i][n-1-j]==c1[n-1-j][i]) a[7]++;
            
            if(c2[i][j]==c1[i][j]) a[8]++;
        }
    for(int i=1;i<9;i++)
        if(a[i]==n*n)
        {
            if(i<5) cout<<i;
            else if(i==8) cout<<6;
            else cout<<5;
            return 0;
        }
    cout<<7;
    return 0;
}




相关标签: codevs