关于在寻找n*m格子内正方形和长方形的数量的问题

您所在的位置:网站首页 一共有八个帽子 关于在寻找n*m格子内正方形和长方形的数量的问题

关于在寻找n*m格子内正方形和长方形的数量的问题

2023-08-17 08:39| 来源: 网络整理| 查看: 265

关于在寻找n*m格子内正方形和长方形的数量的问题 本人有两种方法,一种是暴力枚举法,另外一种则是主要依靠公式法,以下只提供主要的部分代码: 第一种,暴力枚举法: ∵正方形长等于宽

∴子正方形构成的矩阵的长宽由原矩形长宽减去相同数而得

即(n-b)*(m-a) (a=b)

#include using namespace std; long long n,m,rec,sqr; int main() { cin>>n>>m; for(int i=0; i long long temp; if(*a>*b){ temp=*a; *a=*b; *b=temp; } return 0; } int find(long long a,long long b){ for(long long i=1;i sum2+=b-i+1; } changemax(&a,&b); //调用方法,使N,M两边更小的一边为N,而大的一边为M。 for(long long i=a;i>=0;i--){ zhen+=i*b; //又一条公式,表示出来就是正方形的数量总是等于“递减的小边”与“递减的大边”的乘积的总和,一直加加加直到小边N边为0。具体原理网上一搜就有。 b--; } chang=sum1*sum2-zhen; //易知N和M各自的有效边之乘积就是图形总数量。 return 0; } //该方法的思路就是先得出所有图形的数量,再用公式得到正方形的数量,然后相减得到长方形的数量。缺点就是用到公式,难啊难;优点就是时间复杂性大幅降低,一般不会运行超时。

代码如上,欢迎讨论。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3