Squares UVA - 201
还是写得有点啰嗦吧,一开始自己定义的结构体里面有四个变量,结果后面自己在使用的时候发现根本就不需要用到四个,两个就够了...这道题觉得思路还好吧,主要是在题目的说明上面,那里写着的Hij 和 Vij意义是不一样的,应该是Hij 和 Vji,还有就是麻烦的输出格式,这段代码还是可以再做修改的,变得更加简洁。#include <iostream>#include &
·
还是写得有点啰嗦吧,一开始自己定义的结构体里面有四个变量,结果后面自己在使用的时候发现根本就不需要用到四个,两个就够了...
这道题觉得思路还好吧,主要是在题目的说明上面,那里写着的Hij 和 Vij意义是不一样的,应该是Hij 和 Vji,还有就是麻烦的输出格式,这段代码还是可以再做修改的,变得更加简洁。
#include <iostream>
#include <cstring>
using namespace std;
#define N 10
struct dot {
int up, down, left, right;
};
dot dots[N][N];
int size[N];
int n, T, kcase = 0, first = 1;
void H(int,int);
void V(int,int);
void output();
bool is_square(int i,int j,int k); // 以(i,j)为点,长度为k是否能构成正方形
int main() {
/*
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
*/
int i, j;
char ch;
while (cin >> n) {
memset(dots, 0, sizeof(dots));
memset(size, 0, sizeof(size));
cin >> T;
while (T--) {
while (getchar() != '\n')
continue;
cin >> ch >> i >> j;
if (ch == 'H')
H(i, j);
else if (ch == 'V')
V(j, i);
}
output();
}
return 0;
}
void H(int i, int j) {
dots[i][j].right = 1;
dots[i][j+1].left = 1;
}
void V(int i, int j) {
dots[i][j].down = 1;
dots[i+1][j].up = 1;
}
void output() {
for (int k = 1; k <= n - 1; k++) {
for (int i = 1; i <= n - k; i++) {
for (int j = 1; j <= n - k; j++) {
if (is_square(i, j, k))
size[k]++;
}
}
}
if(kcase != 0) {
printf("\n**********************************\n\n");
}
printf("Problem #%d\n\n", ++kcase);
int flag = 1;
for(int i = 1; i < n; i++) {
if(size[i]) {
flag = 0;
printf("%d square (s) of size %d\n",size[i],i);
}
}
if(flag) {
printf("No completed squares can be found.\n");
}
}
bool is_square(int i, int j, int k) {
for (int m = 0; m < k; m++) {
if (!dots[i][j+m].right)
return false;
if (!dots[i+k][j+m].right)
return false;
if (!dots[i+m][j].down)
return false;
if (!dots[i+m][j+k].down)
return false;
}
return true;
}
点击阅读全文
更多推荐
所有评论(0)