思路 : 假设横向为n, 纵向为m 表格的长度为l,宽度为w,先考虑纵向 当 w = 1 l = 1 时 ,如图所示有三种可能 以 n = 2 , m = 3 为例
还是考虑纵向当 w = 2 l = 1时,如图所示有两种可能
依次类推,对这列考虑的时候个数与其宽度 之间有个关系式 , m - w+1,
接下来对行考虑也是这样 先固定w = 1 不变 ,依次考虑 l = 1 , l = 2 .... 可得 n-l+1
则长方形的总个数为 (m-(w - 1))* (n-(l-1))
算出长方形后求正方形就简单了 直接加个判断语句l和w相等就行 ;
完整代码如下:
#include<stdio.h>
typedef long long ll;
int main()
{
ll z = 0, c = 0;
ll n , m;
scanf("%lld%lld",&n,&m);
for(int l = 1 ; l <= n ; l++)
{
for(int w = 1 ; w <= m ; w++)
{
int p = w-1, q = l - 1;
if(p == q)z += (m - p)*(n-q);
else
c += (m - p)*(n-q);
}
}
printf("%lld %lld",z,c);
}
这篇博客探讨了如何计算一个n×m的二维网格中不同大小的长方形总数以及正方形数量。作者首先分析了长方形数量的计算方法,通过考虑长方形的长度l和宽度w的关系式(m-(w-1))*(n-(l-1))。接着,通过添加条件判断来计算正方形的数量。最后,给出了完整的C语言代码实现这一算法。

被折叠的 条评论
为什么被折叠?



