判断边长不同的正方形各有几个
做题体会:
思考1:如何辨别不同大小的正方形一个点有横和竖的时候开始检查4条边是否齐全
思考2:如何存储相同点的横和竖用2个数组分别存储
注意:题目要求输入H时候(行,列);但是输入V时候(列,行);储存V时候只要调换一下就OK
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int n, HV, h[10][10], v[10][10], pro = 1;
int main()
{
while(scanf("%d%d", &n, &HV) == 2 && n)
{
int nedge, num, nothing = 1;
memset(h, 0, sizeof(h));
memset(v, 0, sizeof(v));
while(HV--)
{
char t;
int i,j;
t = getchar();
while(!isalpha(t))
t = getchar();
scanf("%d%d", &i, &j);
if(t == 'H')
h[i][j] = 1;
else if(t == 'V')
v[j][i] = 1;
}
printf("Problem #%d\n\n", pro++);
for(nedge = n; nedge > 0; nedge--)
{
int i, j, size = 0; //square平方
num = 0;
for(i = 1; i < n; i++)
{
for(j = 1; j < n; j++)
{
if(h[i][j] && v[i][j])
{
int p = 0, q, number = 2, check = 1;
while(number--) // 循环检验4条边
{
for(q = 0; q < nedge; q++) //边的边长
{
if(!h[i+p][j+q] || !v[i+q][j+p])
check = 0;
}
p = p + nedge;
}
if(check)
{
nothing = 0;
size++;
}
}
}
}
if(size)
printf("%d square (s) of size %d\n", nedge, size);
}
if(nothing)
printf("No completed squares can be found.\n");
printf("\n**********************************\n\n");
}
return 0;