编程解决智力题之统计正方形

本文介绍了一种编程方法来统计一个图形中正方形的数量。首先,通过统计顶点,得到大正方形四等分边的顶点数和小正方形二等分边的顶点数。接着,利用这些顶点判断并统计所有可能的正方形组合,包括不同边长的正方形。最后,展示了程序代码和运行结果,得出总共有40个正方形的结论。
摘要由CSDN通过智能技术生成

以下为统计正方形个数的程序,图如下:


1. 统计顶点

设最左下坐标为(0,0),右上为(4,4), 将所有的顶点(vertex)保存起来,

则大正方形四等分边会获得vertice.size()==25个vertice.

而小正方形二等分边会获得vertice.size()==9个vertice.


2. 统计正方形

然后再判断并统计所有顶点可以组成的正方形个数:

可得:

前者可得 sqares.size()==30 个正方形,其中边长4为1个,边长3为4个,边长2为9个,边长1为16个。

后者可得 sqares.size()==5 个正方形,其中边长2为1个,边长1为4个。

则图中的总个数是 30+2*5=40个。


3. 程序代码:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

struct Vertex
{
    double x;
    double y;
};
typedef struct Vertex Vertex;
struct Square
{
    int a;
    int b;
    int c;
    int d;
};
typedef struct Square Square;
typedef std::vector<Vertex> vec_vtx;
typedef std::vector<Square> vec_sqr;
typedef std::vector<Square>::iterator vec_sqr_it;

// fill the vertice vector for the sliced Square. 
void fill_vertice(vec_vtx &vertice, int seg)
{
    int v = 0;
    int i,j;
    Vertex unit;
    for (i=0; i<=seg; i++)
        for (j=0; j<=seg; j++)
        {
            unit.x = i;
            unit.y = j;
            vertice.push_back(unit);
        }
}
void illustrate()
{
    // illustrate the graph, * as vertex, --| as bar.
    std::string graph;
    std::string v_bars1 = "|      |    __|__    |  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值