UVA-4.2-正方形-201

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章