UVA201 正方形 Squares 题解

输入输出格式

输入格式

输入包含了多个游戏棋盘。每个棋盘包含了 n^2 个点的正方形矩阵 (其中 2 ≤ n ≤ 9),以及一些起连接作用的横向或纵向的线段。棋盘的的 n^2 个点和 m 条连接线段,格式如下:

第 1 行:n,表示矩阵中单行或单列的点的数目
第 2 行:m,表示连接线段的数目
接下来的 m 行,每行是以下两种格式之一:
(1) H i j 形式,表示第 i 行的横向线段,连接了第 j 列的点和它右边的第 j + 1 列的点;
(2) V i j 形式,表示第 i 列的纵向线段,连接了第 j 行的点和它下方的第 j + 1 行的点。

样例输入数据的第 1 组,对应于上面的图示棋盘。

输出格式

对于每组测试数据,输出 Problem #1, Problem #2 等标识,并输出棋盘上的各种大小的正方形数目,按正方形由小到大的顺序排列。如果不存在任何大小的正方形,则打印相应的提示消息。将各组测试数据以一行星号间隔,星号上下方各有一个空行。请参见示例的格式。

输入输出样例

输入 #1

4
16
H 1 1
H 1 3
H 2 1
H 2 2
H 2 3
H 3 2
H 4 2
H 4 3
V 1 1
V 2 1
V 2 2
V 2 3
V 3 2
V 4 1
V 4 2
V 4 3
2
3
H 1 1
H 2 1
V 2 1

输出 #1

Problem #1
2 square (s) of size 1
1 square (s) of size 2
**********************************
Problem #2
No completed squa

思路

分开存横边和竖边,先查size为1的正方形,从第一个顶点开始查,具体思路可以看代码

代码

#include <stdio.h>
#include <string.h>
#define maxn 15
// 分开储存
int r[maxn][maxn];
int c[maxn][maxn];
int main() {
	int n;
	int kase = 0;
	while (scanf("%d", &n) != EOF) {
		memset(r, 0, sizeof(r));
		memset(c, 0, sizeof(c));
        // 注意格式!!!
		if (kase > 0) {
			printf("\n");
			printf("**********************************\n\n");
		}
		int len;
		scanf("%d", &len);
		for (int k = 0; k < len; k++) {
			char ch;
			int i, j;
			getchar();
			scanf("%c", &ch);
			if (ch == 'H') {
				scanf("%d%d", &i, &j);
                // 有边则设置为1
				r[i][j] = 1;
			} else if (ch == 'V') {
				scanf("%d%d", &i, &j);
				c[i][j] = 1;
			}
		}
		int flag = 1;
		int all[n];
		memset(all, 0, sizeof(all));
		printf("Problem #%d\n\n", ++kase);
		int num = 0;
		for (int i = 1; i < n; i++) {
			for (int j = 1; j <= n * (n - i); j++) {
				flag = 1;
				for (int k = 0; k < i; k++) {
                    // 关键代码,判断边是否符合条件.
					if (r[(j - 1) / n + 1][(j - 1) % n + 1 + k] != 1 || r[(j - 1) / n + 1 + i][(j - 1) % n + 1 + k] != 1|| c[(j - 1) % n + 1][(j - 1) / n + 1 + k] != 1 ||c[(j - 1) % n + 1 + i][(j - 1) / n + 1 + k] != 1) {
						flag = 0;
						break;
					}
				}
				if (flag == 1) {
					all[i]++;
				}
			}
			if (all[i] > 0) {
				printf("%d square (s) of size %d\n", all[i], i);
				num++;
			}
		}
		if (num == 0) {
			printf("No completed squares can be found.\n");
		}
	}
	return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: `squares.append()`是Python语言中列表对象的一个方法,用于在列表末尾添加一个元素。例如,如果你有一个名为"squares"的列表,并且想在其末尾添加数字9,你可以使用以下代码: ``` squares.append(9) ``` 这将在列表末尾添加数字9。 ### 回答2: 在Python中,squares.append()是一个列表方法,用于向列表中添加元素。该方法接受一个参数,即要添加的元素,并将该元素添加到列表的末尾。 例如,假设我们有一个空列表squares。我们可以使用以下代码将一个元素添加到列表中: squares = [] squares.append(4) 现在,squares列表将包含一个元素,即数字4。我们可以进一步使用append()方法来添加更多的元素到列表中。例如: squares.append(9) squares.append(16) squares.append(25) 现在,squares列表将依次包含数字4、9、16和25。 总结而言,squares.append()是一个有用的列表方法,它允许我们在Python中向列表中添加元素。无论列表是否为空,我们都可以使用append()方法将元素添加到列表的末尾。 ### 回答3: `python squares.append`是Python语言中的一个方法,用于将一个元素追加到列表(list)中。在使用该方法时,需要先创建一个列表对象,并且可以在括号内指定要追加的元素。 例如,以下是一个使用`squares.append`的示例: ```python squares = [] # 创建一个空的列表对象 # 使用append方法将元素依次追加到列表中 squares.append(1) squares.append(4) squares.append(9) squares.append(16) print(squares) # 输出结果为:[1, 4, 9, 16] ``` 在上述示例中,我们首先创建了一个空的列表对象`squares`。然后,使用`squares.append`方法依次向列表中追加了四个元素,分别是1、4、9和16。最后,通过`print(squares)`将列表内容打印输出,结果为`[1, 4, 9, 16]`。 总而言之,`python squares.append`是用于将一个元素追加到列表中的Python方法,可以方便地扩充列表的内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值