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;
}