연습문제 4-2 정사각형 UVa201

2120 단어 uva
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("
**********************************

"); printf("Problem #%d

", ++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
", count, i); } if (!flag) printf("No completed squares can be found.
"); } return 0; }



좋은 웹페이지 즐겨찾기