算法习题---4-2正方形(UVa201)
一:题目
判断一个点阵中含有几个正方形(数正方形)
如图例中:有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)的更多相关文章
- 【算法习题】数组中任意2个(3个)数的和为sum的组合
题1.给定一个int数组,一个数sum,求数组中和为sum的任意2个数的组合 @Test public void test_find2() { int[] arr = { -1, 0, 2, 3, 4 ...
- July 算法习题 - 字符串4(全排列和全组合)
https://segmentfault.com/a/1190000002710424 思想:当前层各节点首元素不同,则各节点的剩余元素也不同:下一层节点交换范围为首元素以外的元素 全排列算法: vo ...
- 算法习题---4-10洪水(UVa815)
一:题目 有一个n*m(<=n,m<=)的网格,每个格子都是边长为10米的正方形,网格四周是无限大的墙壁.输入每个格子的海拔高度,以及网格内雨水的总体积,输出水位的海拔高度以及有多少百分比 ...
- 算法习题---4-9数据挖掘(Uva1591)
一:题目 这是最懵逼的一道题,什么鬼......... [刷题]算法竞赛入门经典(第2版) 4-9/UVa1591 - Data Mining(详细题目看这个吧,不想多说) 二:代码实现 #defin ...
- tarjan算法 习题
dfs树与tarjan算法 标签(空格分隔): 517coding problem solution dfs树 tarjan Task 1 给出一幅无向图\(G\),在其中给出一个dfs树\(T\), ...
- 【算法习题】正整数数组中和为sum的任意个数的组合数
1.递归实现(参考:https://blog.csdn.net/hit_lk/article/details/53967627) public class Test { @org.junit.Test ...
- 算法习题-FFT
Q1(hdu1402): 给出两个很大的数字A,B,计算二者乘积. 分析:这个题目java应该能过,用FFT做能够加速计算.这里将字符串A按权(10进制)展开,前面的系数就是多项式的系数,这样就构造出 ...
- 算法习题---5-8图书管理系统*****<双向迭代器>(UVa230)
一:题目 就是输入一系列书本名和作者名,然后输入命令模拟借书和还书,再输出归还的书的摆放位置.要求有两点: 需要对归还的书做特殊排序处理:作者名相同,则书本按书名从小到大排序:否则书本按作者名大小排序 ...
- 算法习题---5-7打印队列(UVa12100)
一:题目 有一个打印机,有一些任务在排着队打印,每个任务都有优先级.打印时,每次取出队列第一个任务,如果它的优先级不是当前队列中最高的,就会被放到队尾,否则就打印出来.输出初始队列的第m个任务的打印时 ...
随机推荐
- webpack中如何编写一个plugin
loader和plugin有什么区别呢?什么是loader,什么是plugin. 当我们在源代码里面去引入一个新的js文件或者一个其他格式的文件的时候,这个时候,我们可以借助loader去帮我们处理引 ...
- 小知识——c++关于指针的理解
参考文章: 简介: 指针可以简化c++编程,在一些任务中没有指针是无法完成的(动态内存分配) 使用 & 可以获得变量在内存中的地址: eg: #include <iostream> ...
- selenium.webdriver获取结果转为json格式
from selenium import webdriver driver.get(requestUrl)html = driver.page_sourcesoup = BeautifulSoup(h ...
- Codeforces#572 Div2 C---Candies!【倍增】【DP】【思维】
题目:http://codeforces.com/contest/1189/problem/C 题意:给定n个数,每次查询一个区间$[l,r]$.对这个区间内的数,相邻两个数之和超过10,则得到一个c ...
- [CSS] Change the Alignment of a Single Flexed Item with 'align-self'
Inside of a flexed container, a single item can control its own flex with align-self. The possible v ...
- SIGAI机器学习第十五集 支持向量机2
讲授线性分类器,分类间隔,线性可分的支持向量机原问题与对偶问题,线性不可分的支持向量机原问题与对偶问题,核映射与核函数,多分类问题,libsvm的使用,实际应用 大纲: SVM求解面临的问题 SMO算 ...
- 009——C#全局变量定义
(一)窗体二定义,static静态 public static byte[] waveform_data = { }; // 数据,在串口接收中变化 public static bool wavefo ...
- LOJ P10163 Amount of Degrees 题解
每日一题 day6 打卡 Analysis 题目的意思是找在区间[x,y]之间满足能够由k个b的不同次幂相加得到的数的总数.这题的关键是转换进制,之前几道题我们保存的是数的每位数,其实也就是10进制, ...
- *51nod 1815
从若干个数中选出最大的任意两数取模之后的结果 严格次大值 对于此题 首先缩点 然后拓扑排序 维护到达每个点的最大值与严格次大值 感觉思路与代码都OK啊 then.... #include <io ...
- 第四组团队git现场编程实战
组员职责分工 组员 分工 林涛(组长) 分配任务.整理数据.写博客 童圣滔 UI界面制作 林红莲 UI界面制作 潘雨佳 测评出福州最受欢迎的商圈 于瀚翔 测评出福州最受欢迎的商圈 覃鸿浩 测评出福州人 ...