一:题目

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

如图例中:有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. JSOI2009 密码 和 JSOI2007 文本生成器 和 ZOJ3545 Rescue the Rabbit

    密码 众所周知,密码在信息领域起到了不可估量的作用.对于普通的登陆口令,唯一的破解 方法就是暴力破解一逐个尝试所有可能的字母组合,但这是一项很耗时又容易被发现的工 作.所以,为了获取对方的登陆口令,在 ...

  2. matlab(2) Logistic Regression: 画出样本数据点plotData

    画出data数据 data数据 34.62365962451697,78.0246928153624,030.28671076822607,43.89499752400101,035.84740876 ...

  3. 用CSS 实现 非浮动元素的 水平居中/垂直居中/水平垂直居中

    一.水平居中 (1)行内元素解决方案 只需要把行内元素包裹在一个属性display为block的父层元素中,并且把父层元素添加如下属性即可:   .parent { text-align:center ...

  4. vue 组件高级用法(递归组件,内联模板,动态组件,异步组件)

  5. go语言-数据类型及类型之间转换

    数据类型分类 一.数据类型-基本数据类型 1.整数型(int.有符号(int8/1字节.int16/2字节.int32/4字节.int64/8字节).无符号(uint.uint8.uint16.uin ...

  6. LightOJ - 1214-Large Division(数学,同余)

    链接: https://vjudge.net/problem/LightOJ-1214 题意: Given two integers, a and b, you should check whethe ...

  7. 61、springmvc-异步请求-返回DeferredResult

    61.springmvc-异步请求-返回DeferredResult 61.1 DeferredResult 官方文案 61.2 使用 /** * 创建订单加入 订单处理队列 * * @return ...

  8. 使用$.getJSON("xx.json" ,function(data){ console.logy(data); })在本地获取 json数据

    使用 $.getJSON() 在本地获取 json数据  默认在谷歌,火狐等其他浏览器,不允许在本地获取服务器数据 所以不能在本地中使用 但是可以IE 11 中又可以使用,所以,测试时建议在IE浏览器 ...

  9. VSCodeUserSetup安装教程

    VSCodeUserSetup: isual Studio Code是一个轻量级但功能强大的源代码编辑器,可在桌面上运行,适用于Windows,macOS和Linux.它内置了对JavaScript, ...

  10. spring中少用的注解@primary解析

    这次看下spring中少见的注解@primary注解,例子 @Component public class MetalSinger implements Singer{ @Override publi ...