• hdu4772 水模拟


    题意:
          给你两个矩阵,问你两个矩阵的最大相同元素个数(位置也要求相同),矩阵可以90旋转多次。

    思路:
          水题,直接模拟就行了,方法很多,可以直接写坐标关系,或者一层一层处理,就是一层一层往里拿出来,比较就行了,两个都写了。


    直接交换
    #include<stdio.h>


    int A[32][32] ,B[32][32] ,C[32][32];


    void swap(int n)
    {
       for(int i = 1 ;i <= n ;i ++)
       for(int j = 1 ;j <= n ;j ++)
       C[i][j] = A[j][n-i+1];
       for(int i = 1 ;i <= n ;i ++)
       for(int j = 1 ;j <= n ;j ++)
       A[i][j] = C[i][j];
    }


    int main ()
    {
       int n ,i ,j ,ans;
       while(~scanf("%d" ,&n) && n)
       {
          for(i = 1 ;i <= n ;i ++)
          for(j = 1 ;j <= n ;j ++)
          scanf("%d" ,&A[i][j]);
          for(i = 1 ;i <= n ;i ++)
          for(j = 1 ;j <= n ;j ++)
          scanf("%d" ,&B[i][j]);
          int ans = 0;
          for(int c = 1 ;c <= 4 ;c ++)
          {
             int sum = 0;
             for(i = 1 ;i <= n ;i ++)
             for(j = 1 ;j <= n ;j ++)
             if(A[i][j] == B[i][j]) sum ++;
             if(ans < sum) ans = sum;
             swap(n);
          }
          printf("%d " ,ans);
       }
       return 0;
    }


    一层一层比较


    #include<stdio.h>


    int get_len(int c ,int n ,int A[32][32] ,int C[])
    {
       int tmp = 0 ,i;
       for(i = c ;i <= n - c + 1 ;i ++)
       C[++tmp] = A[c][i];
       for(i = c + 1 ;i <= n - c + 1 ;i ++)
       C[++tmp] = A[i][n - c + 1];
       for(i = n - c + 1 - 1 ;i >= c ;i --)
       C[++tmp] = A[n - c + 1][i];
       for(i = n - c + 1 - 1 ;i >= c + 1 ;i --)
       C[++tmp] = A[i][c];
       return tmp;
    }




    int main ()
    {
       int A[32][32] ,B[32][32] ,C[1000] ,D[1000];
       int i ,j ,n;
       int sum[5];
       while(~scanf("%d" ,&n) && n)
       {
          for(i = 1 ;i <= n ;i ++)
          for(j = 1 ;j <= n ;j ++)
          scanf("%d" ,&A[i][j]);
          for(i = 1 ;i <= n ;i ++)
          for(j = 1 ;j <= n ;j ++)
          scanf("%d" ,&B[i][j]);
          sum[1] = sum[2] = sum[3] = sum[4] = 0;
          for(int c = 1 ;c <= (n + 1) / 2 ;c ++)
          {
              int tmp1 = get_len(c ,n ,A ,C);
              int tmp2 = get_len(c ,n ,B ,D);
              for(i = 1 ;i <= 4 ;i ++)
              {
                  for(j = 1 ;j <= tmp1 ;j ++)
                  {
                     int now = j + (n - c + 1 - c) * (i - 1);
                     if(now > tmp1) now -= tmp1;
                     if(C[now] == D[j]) sum[i] ++;
                  }           
             }
          }
          int ans = 0;
          for(i = 1 ;i <= 4 ;i ++)
          if(ans < sum[i]) ans = sum[i];
          printf("%d " ,ans);
       }
       return 0;
    }
              
              
             
              
              
              
              
        
              
                
             
       



  • 相关阅读:
    recyclerView DiffUtil使用
    RecyclerView实现侧滑删除、置顶、滑动
    Android RecyclerView
    视频框架 Vitamio使用
    react native初始化项目
    react native环境搭建
    javascript Promise
    javascript 基础
    [IOS学习笔记]KVO
    [IOS学习笔记] UINavigationController Demo
  • 原文地址:https://www.cnblogs.com/csnd/p/12062919.html
Copyright © 2020-2023  润新知