zoukankan      html  css  js  c++  java
  • Transformations 方块转换 USACO 模拟 数组 数学 耐心

    1006: 1.2.2 Transformations 方块转换

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 10  解决: 7
    [提交] [状态] [讨论版] [命题人:外部导入]

    题目描述

    1.2.2 Transformations 方块转换 

    (transform.pas/c/cpp)

      一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案。写一个程序来找出将原始图案按照以下列转换方法转换成新图案的最小方式: 

    1:转90度:图案按顺时针转90度。 

    2:转180度:图案按顺时针转180度。 

    3:转270度:图案按顺时针转270度。 

    4:反射:图案在水平方向翻转(以中央铅垂线为中心形成原图案的镜像)。 

    5:组合:图案在水平方向翻转,然后再按照1到3之间的一种再次转换。 

    6:不改变:原图案不改变。 

    7:无效转换:无法用以上方法得到新图案。 

    如果有多种可用的转换方法,请选择序号最小的那个。 

    只使用1--7中的一个步骤来完成这次转换。 

    格式

    PROGRAM NAME: transform 

    INPUT FORMAT: 

    file (transform.in) 

    第一行: 单独的一个整数N。 

    第二行到第N+1行: N行每行N个字符(不是“@”就是“-”);这是转换前的正方形。 

    第N+2行到第2*N+1行: N行每行N个字符(不是“@”就是“-”);这是转换后的正方形。 

    OUTPUT FORMAT: 

    file (transform.out) 

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

    SAMPLE INPUT

    3
    @-@
    ---
    @@-
    @-@
    @--
    --@
    

    SAMPLE OUTPUT

    1

    提示

    来源/分类

    天哪 就是一个超级大模拟

    只是在自己思考的时候有些困难

    算了 我们还是挨个条件分析一下吧

    好吧 还是敲出来了 挺考验耐力的

    也挺同情这一堆函数来回传bool值~O(∩_∩)O哈哈~

    不说了粘代码吧

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 char a[15][15],Endmatrix[15][15],b[15][15],bb[15][15];
     4 bool check(int n){
     5     for(int i=1;i<=n;i++)
     6         for(int j=1;j<=n;j++)
     7             if(b[i][j]!=Endmatrix[i][j])
     8                 return false;
     9     return true;
    10 }
    11 void init(int n){
    12     for(int i=1;i<=n;i++) 
    13         for(int j=1;j<=n;j++)
    14             cin>>a[i][j];
    15     for(int i=1;i<=n;i++)
    16         for(int j=1;j<=n;j++)
    17             cin>>Endmatrix[i][j];
    18 }
    19 void Type_1(int n){
    20     for(int i=1;i<=n;i++) 
    21         for(int j=1;j<=n;j++)
    22             b[j][n-i+1]=a[i][j];
    23 }
    24 void Type_2(int n){
    25     for(int i=1;i<=n;i++)
    26             for(int j=1;j<=n;j++)
    27                 b[n-i+1][n-j+1]=a[i][j];
    28 }
    29 void Type_3(int n){
    30     for(int i=1;i<=n;i++)
    31         for(int j=1;j<=n;j++)
    32             b[n-j+1][i]=a[i][j];
    33 }
    34 void Type_4(int n){
    35     for(int i=1;i<=n;i++)
    36         for(int j=1;j<=n;j++)
    37             b[i][n-j+1]=a[i][j];
    38 }
    39 bool Type_5(int n){
    40     for(int i=1;i<=n;i++)
    41         for(int j=1;j<=n;j++)
    42             bb[i][n-j+1]=a[i][j];
    43     for(int i=1;i<=n;i++) 
    44         for(int j=1;j<=n;j++)
    45             b[j][n-i+1]=bb[i][j];
    46     if(check(n)) return true;
    47     for(int i=1;i<=n;i++)
    48         for(int j=1;j<=n;j++)
    49             b[n-i+1][n-j+1]=bb[i][j];
    50     if(check(n)) return true;
    51     for(int i=1;i<=n;i++)
    52         for(int j=1;j<=n;j++)
    53             b[n-j+1][i]=bb[i][j];
    54     return check(n);
    55 }
    56 bool Control(int Type,int n){
    57     if(Type==7) return true;
    58     if(Type==1) {Type_1(n);return check(n);}
    59     if(Type==2) {Type_2(n);return check(n);}
    60     if(Type==3) {Type_3(n);return check(n);}
    61     if(Type==4) {Type_4(n);return check(n);}
    62     if(Type==5) return Type_5(n);
    63     if(Type==6) return check(n);
    64 }
    65 int main(){
    66     int n; scanf("%d",&n);
    67     init(n);
    68     for(int i=1;i<=7;i++)
    69         if(Control(i,n)){
    70             printf("%d",i);
    71             break;
    72         }
    73     return 0;
    74 }

    加油吧~

  • 相关阅读:
    React Native for Android应用名及图标修改
    如何不使用Navigator空间实现跳转页面?
    ReactNative WebView组件详解
    react-native react-navigation使用
    微信小程序——选择某个区间的数字
    Git分支操作——查看、新建、删除、提交、合并
    Github + Hexo 搭建个人博客
    微信小程序——动态设置swiper的高度
    微信小程序——购物车结算
    解决stackoverflow打开慢的问题
  • 原文地址:https://www.cnblogs.com/Tidoblogs/p/11294980.html
Copyright © 2011-2022 走看看