如何求 在 n x m 个方格中找出所有长方形,正方形的个数

 思路 : 假设横向为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);
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值