UVA-4.2-正方形-201

本文介绍UVA-4.2-正方形-201题目的解决方法,该题要求通过输入的横线与竖线判断能否构成正方形,并统计不同大小正方形的数量。文章提供了详细的解题思路与C语言实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UVA-4.2-正方形-201
题目描述:
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=833&problem=137&mosmsg=Submission+received+with+ID+18630747
这题大体就是通过两种输入表示输入横线或者竖线,然后判断是否能组成正方形。
大体就是这样。
输出能组成多少个多少长度的正方形。
题目分析:
这题=。=弄俩数组,一个用来标记横线,一个用来标记竖线,然后用循环枚举查找就好了。
给出代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int as(int heng[][12],int lie[][12],int a,int n);
int main()
{
     int hang[12][12];
     int lie[12][12];
     memset(hang,0,sizeof(hang));
     memset(lie,0,sizeof(lie));
     int count=0;
     int n;
     while(scanf("%d",&n)!=EOF)
     {   count++;
         char space;
         space=getchar();
         //char ch;
         int N;
         scanf("%d%*C",&N);
         while(N--)
         {   char ch;
             ch=getchar();
             int a,b;
             scanf("%d%d%*c",&a,&b);
             if(ch=='H')
             {
                 hang[a][b]=1;
             }
             else
             {
                 lie[b][a]=1;
             }
         }
         if(count!=1)
         {
             printf("\n**********************************\n\n");

         }
         printf("Problem #%d\n\n",count);
         int i,j;
         int mark=1;
         for(i=1;i<=n;i++)
         {
             int sum=as(hang,lie,i,n);
             if(sum!=0)
             {
                    mark=0;
                    printf("%d square (s) of size %d\n",sum,i);
             }
         }
         if(mark)
            printf("No completed squares can be found.\n");
        memset(hang,0,sizeof(hang));
        memset(lie,0,sizeof(lie));
     }
}
int as(int hang[][12],int lie[][12],int a,int n)
{
    int i,j,x,y;
    int count=0;
    for(i=1;i+a<=n;i++)
    {
        for(j=1;j+a<=n;j++)
        {
            int mark=1;
            int x,y;
            for(x=i;x<i+a;x++)
            {
                if(lie[x][j]!=1)
                    mark=0;
            }
            for(y=j;y<j+a;y++)
            {
                if(hang[i][y]!=1)
                    mark=0;
            }
            for(x=i;x<i+a;x++)
            {
                if(lie[x][j+a]!=1)
                    mark=0;
            }
            for(y=j;y<j+a;y++)
            {
                if(hang[i+a][y]!=1)
                    mark=0;
            }
            if(mark)
                count++;
        }
    }
    return count;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值