zoukankan      html  css  js  c++  java
  • 第一篇博客UVA201

    因接触该类题型很少 故没有想出相应的解决办法 故借鉴了网上他人的方法 在看了他人程序后 自己又打了一遍 并加上了一些注释 希望对一些只会C的同学有些帮助。

    #include<stdio.h>
    #include"common.h"//自己写的一个头文件 本题中Min函数是其中之一
    #include<string.h>

    int H[10][10],V[10][10];
    int n,m;
    int size_[10];

    void zheng(int x,int y)
    {
    int a1,a2,a;
    a1=n-x;//可以往右最长的边 
    a2=n-y;//往下最长的边 
    a=min(a1,a2); //可能组成最大的正方形 
    int i,j;
    for(i=0;i<a;i++)//i+1表示所有可能的边长 

    if(H[x+i][y]&&V[x][y+i]) 
    {
    for(j=0;j<=i;j++)
    {
    if(!H[x+1+i][y+j]||!V[x+j][y+1+i]) /*其中1+i表示边长 x为起始的点则[x+1+i][y] 表示该正方形
    左下角那个点[x+1+i][y+j]即从左下角那个点一直循环到最右边 同理可得 [x+j][y+1+i] 表示从
    右上角那个点一直循环到右下角 这样和前面的形成了封闭正方形 
    */
    break;
    if(i==j)// 
    size_[i+1]++;
    }
    }
    else break;



    }
    void biaoji()
    {
    memset(H,0,sizeof(H));
    memset(V,0,sizeof(V));
    for(int i=0;i<m;)
    {
    int c;
    c=getchar();
    while(c=='H'||c=='V')
    {
    i++;
    if(c=='H')

    H[getchar()-'0'][getchar()-'0']++; 
    }
    if(c=='V')
    {
    V[getchar()-'0'][getchar()-'0']++;
    }
    c=getchar();
    }
    }
    for(int i=0;i<10;i++)
    {
    for(int j=0;j<10;j++)
    {
    printf(".");
    }
    }
    }

    void huaxian()
    {
    for(int i=1;i<=n;i++)
    {
    for(int j=1;j<=n;j++)
    {
    if(H[i][j]&&V[i][j])
    zheng(i,j);
    }
    }
    }

    int main(void)
    {
    scanf("%d%d",&n,&m);
    biaoji();
    huaxian();
    for(int i=1;i<=10;i++)
    {
    printf("边长为%d的正方形有%d个 ",i,size_[i]);
    }
    return 0;
    }

    另:本人自己的思路是定义一个三维数组a[10][10][4] 前面代表点的行和列 第三维代表该点上下左右方向是否有线 其元素数值判断有无 1代表有 0代表无

    那么就可以根据读取H V的数据来进行相关的赋值 如H12 就可以赋a[1][2][3]=1 a[1][3][2]=1 以此类推 而判断的方法与此题相同(这里是难点 我就是这里想不出来)

    即本题zheng函数的思路。

  • 相关阅读:
    【第36题】2019年OCP认证12C题库062考试最新考试原题
    004 基本命令 touch cp mv 命令
    003 基本指令 mkdir rm -rf(暴力删除)
    002 文件目录类的指令 cd ls
    001 指定运行级别
    005 抽象工厂模式
    006 使用类加载器加载资源文件
    004 方法反射
    003 属性反射
    003 工厂方法模式
  • 原文地址:https://www.cnblogs.com/aloney/p/4462693.html
Copyright © 2011-2022 走看看