现在的位置: 首页 > 综合 > 正文

习题4-2 正方形 UVa201

2018年04月29日 ⁄ 综合 ⁄ 共 1266字 ⁄ 字号 评论关闭

1.题目描述:点击打开链接

2.解题思路:把输入的每个点作为矩形左上角,顺时针走一圈,看能否围成一个边长为len的正方形

3.代码:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<math.h>
#include<stdlib.h>
#define max 200
int n, m;
int arr[max][3];
int find(int len, int a, int x, int y)
{
	if (a == 'V') return 0;
	int aa = 1, bb = 1, cc = 1, dd = 1;
	int k;
	for (int i = y; i < y + len; i++)
	{
		for (k = 0; k < m; k++)
		if (arr[k][0] == 'H'&&arr[k][1] == x&&arr[k][2] == i)
			break;
		if (k == m) aa = 0;
	}
	for (int i = y; i < y + len; i++)
	{
		for (k = 0; k < m; k++)
		if (arr[k][0] == 'H'&&arr[k][1] == x + len&&arr[k][2] == i)
			break;
		if (k == m) bb = 0;
	}
	for (int i = x; i < x + len; i++)
	{
		for (k = 0; k < m; k++)
		if (arr[k][0] == 'V'&&arr[k][2] == i&&arr[k][1] == y)
			break;
		if (k == m) cc = 0;
	}
	for (int i = x; i < x + len; i++)
	{
		for (k = 0; k < m; k++)
		if (arr[k][0] == 'V'&&arr[k][2] == i&&arr[k][1] == y + len)
			break;
		if (k == m)dd = 0;
	}
	if (aa&&bb&&cc&&dd) return 1;
	return 0;
}

int main()
{

	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	int rnd = 0;
	while (scanf("%d%d", &n, &m) == 2)
	{
		for (int i = 0; i < m; i++)
			scanf("%s%d%d", &arr[i][0], &arr[i][1], &arr[i][2]);
		if (rnd)
			printf("\n**********************************\n\n");
		printf("Problem #%d\n\n", ++rnd);
		int flag = 0;
		for (int i = 1; i < n; i++)
		{
			int count = 0;
			for (int j = 0; j < m; j++)
			{
				if (find(i, arr[j][0], arr[j][1], arr[j][2]))
				{
					flag = 1;
					count++;
				}
			}
			if (count)
				printf("%d square (s) of size %d\n", count, i);
		}
		if (!flag)
			printf("No completed squares can be found.\n");
	}
	return 0;
}



抱歉!评论已关闭.