一:题目

判断一个点阵中含有几个正方形(数正方形)

如图例中:有2个边长为1的正方形,1个边长为2的正方形

(一)题目详解

(二)样例输入

4       表示每行每列各有4个顶点
16      表示整个点阵中共有16条边
H 1    H表示水平边 从(1,1)->(1,2)之间有一条边  注意:1 1 表示水平第一行第一个顶点
H
H
H
H
H
H
H
V 1    V表示垂直边 从(1,1)->(2,1)之间有一条边 注意:1 1 表示垂直看第一列第一个顶点
V
V
V
V
V
V
V


H
H
V

二:代码实现

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h> #define N 9
int n,m;
int edge[N*N][]; //边信息
int square[N+][N+]; //正方形顶点信息,从(1,1)开始

获取边信息edge,并转换为一个二维数组square保存顶点信息《重点》

void getInfo()
{
//获取顶点、边数
scanf("%d", &n);
scanf("%d", &m); //将边信息转换为正方形信息
memset(square, sizeof(square), ); //获取边信息
for (int i = ; i < m; i++)
{
getchar();
scanf("%c %d %d", (char*)&edge[i][], &edge[i][], &edge[i][]);
//注意1表示水平有边,2表示垂直有边,既有水平,又有垂直为3
//注意V的时候 V 2 1 是代表第二列第一个
edge[i][] == 'H' ? square[edge[i][]][edge[i][]] += : square[edge[i][]][edge[i][]] += ;
}
}

获取指定边数的正方形个数

int getNumForSq(int ec)
{
//从正方形左上角开始从上到下,从左到右
int num = ,x,y;
for (int i = ; i <= n - ec;i++) //列
{
for (int j = ; j <= n - ec;j++) //行
{
if (square[j][i]!=) //此处有顶点
{
//开始判断是否有指定大小正方形
x = j, y = i;
//判断上横边
for (y = i; y <= i + ec-; y++)
if (!(square[x][y] == || square[x][y] == ))
goto Next; //判断下横边 x = j + ec, y = i;
for (y = i; y <= i + ec-; y++)
if (!(square[x][y] == || square[x][y] == ))
goto Next; //判断左边
x = j, y = i;
for (x = j; x <= j + ec-;x++)
if (!(square[x][y] == || square[x][y] == ))
goto Next; //判断右边
x = j, y = i + ec;
for (x = j; x <= j + ec-; x++)
if (!(square[x][y] == || square[x][y] == ))
goto Next; //构成正方形
num++;
} Next:;
}
} return num;
}

主函数

int main()
{
FILE* fp=freopen("data2.in", "r", stdin);
freopen("data2.out", "w", stdout);
int i = , j,num,flag; while (!feof(fp))
{
//获取一组信息
flag = ;
getInfo();
printf("Problem #%d\n\n", i++); //开始进行计算正方形大小 从1->n-1
for (j = ; j < n;j++)
{
num = getNumForSq(j);
if (num)
{
printf("%d square(s) of size %d\n", num, j);
flag = ;
}
} flag ? printf("\n**************************\n\n") : printf("No completed squares can be found.\n");
} freopen("CON", "r", stdin);
freopen("CON", "w", stdout); return ;
}

结果输出

算法习题---4-2正方形(UVa201)的更多相关文章

  1. 【算法习题】数组中任意2个(3个)数的和为sum的组合

    题1.给定一个int数组,一个数sum,求数组中和为sum的任意2个数的组合 @Test public void test_find2() { int[] arr = { -1, 0, 2, 3, 4 ...

  2. July 算法习题 - 字符串4(全排列和全组合)

    https://segmentfault.com/a/1190000002710424 思想:当前层各节点首元素不同,则各节点的剩余元素也不同:下一层节点交换范围为首元素以外的元素 全排列算法: vo ...

  3. 算法习题---4-10洪水(UVa815)

    一:题目 有一个n*m(<=n,m<=)的网格,每个格子都是边长为10米的正方形,网格四周是无限大的墙壁.输入每个格子的海拔高度,以及网格内雨水的总体积,输出水位的海拔高度以及有多少百分比 ...

  4. 算法习题---4-9数据挖掘(Uva1591)

    一:题目 这是最懵逼的一道题,什么鬼......... [刷题]算法竞赛入门经典(第2版) 4-9/UVa1591 - Data Mining(详细题目看这个吧,不想多说) 二:代码实现 #defin ...

  5. tarjan算法 习题

    dfs树与tarjan算法 标签(空格分隔): 517coding problem solution dfs树 tarjan Task 1 给出一幅无向图\(G\),在其中给出一个dfs树\(T\), ...

  6. 【算法习题】正整数数组中和为sum的任意个数的组合数

    1.递归实现(参考:https://blog.csdn.net/hit_lk/article/details/53967627) public class Test { @org.junit.Test ...

  7. 算法习题-FFT

    Q1(hdu1402): 给出两个很大的数字A,B,计算二者乘积. 分析:这个题目java应该能过,用FFT做能够加速计算.这里将字符串A按权(10进制)展开,前面的系数就是多项式的系数,这样就构造出 ...

  8. 算法习题---5-8图书管理系统*****<双向迭代器>(UVa230)

    一:题目 就是输入一系列书本名和作者名,然后输入命令模拟借书和还书,再输出归还的书的摆放位置.要求有两点: 需要对归还的书做特殊排序处理:作者名相同,则书本按书名从小到大排序:否则书本按作者名大小排序 ...

  9. 算法习题---5-7打印队列(UVa12100)

    一:题目 有一个打印机,有一些任务在排着队打印,每个任务都有优先级.打印时,每次取出队列第一个任务,如果它的优先级不是当前队列中最高的,就会被放到队尾,否则就打印出来.输出初始队列的第m个任务的打印时 ...

随机推荐

  1. Eclipse安装scala插件

    1.下载插件 http://scala-ide.org/download/current.html ​ 2.将下载的压缩包解压,拷贝到eclipse\dropins目录下 3.启动eclipse,安装 ...

  2. dos中查找端口的PID,并在任务管理器中处理端口

    本文来源https://www.cnblogs.com/lsyf/p/8979012.html 1.查看所有端口进程 首先点击开始菜单选择运行,接着在运行对话框中输入“cmd”,回车打开命令提示符窗口 ...

  3. python_反射——根据字符串获取模块中的属性

    1.获取当前模块中的属性 class Person(object): def __init__(self,name,age): self.name = name self.age = age p = ...

  4. 理解*arg 、**kwargs

    这两个是python中的可变参数.*args表示任何多个无名参数,它是一个tuple(元祖):**kwargs表示关键字参数,它是一个dict(字典).并且同时使用*args和**kwargs时,必须 ...

  5. Java中static用来计数

    搓搓的代码 import java.util.ArrayList; import java.util.Iterator; class Student{ private static int num; ...

  6. 十六.部署PXE网络装机

    PXE组件及过程分析 • 需要哪些服务组件? – DHCP服务,分配IP地址.定位引导程序 – TFTP服务,提供引导程序下载 – HTTP服务,提供yum安装源 • 客户机应具备的条件 – 网卡芯片 ...

  7. 十.iSCSI网络磁盘

    默认端口:3260 • Internet SCSI,网际SCSI接口 – 一种基于C/S架构的虚拟磁盘技术 – 服务器提供磁盘空间,客户机连接并当成本地磁盘使用   • backstore,后端存储 ...

  8. Mina整体体系结构分析

    mina在应用程序中处于什么样的地位? mina屏蔽了一些网络通信细节对socket进行封装,并且基于NIO非阻塞框架,可以帮助我们快速开发网络通信,常常用于用户游戏开发,中间件等服务端应用程序.

  9. HashMap,HashTable,ConcurrentHashMap的实现原理及区别

    http://youzhixueyuan.com/concurrenthashmap.html 一.哈希表 哈希表就是一种以 键-值(key-indexed) 存储数据的结构,我们只要输入待查找的值即 ...

  10. loj #2319

    noip2017列队 - resolve 标签:题解 \(n * m\) 的矩阵,每个元素 \((i, j)\) 的标号为 \((i - 1) * m + j\), 每次给出 \((x, y)\), ...