目录
一、题目链接
简而言之,以单位规格1*1的正方形,输入n和m,问当面积为n*m时,正方形个数有多少个,长方形(不包含正方形)个数有多少个?
二、思路
1.求矩形个数(包含正方形和长方形)
在上述矩形中,给出n=5,m=3。
在最上面一排的6个点中,任意取出2个点进行连线即可构成矩形的一个边长,同理,在最左边一列的4个点中,任意取出2个点进行连线即可构成矩形的另一个边长。
根据排列组合,矩形个数 = C(6,2) * C(4,2) = (6*5 / 2)*(4*3 / 2) = 90 (个) 。
2.求正方形个数
正方形边长为1的个数:3 * 5
正方形边长为2的个数:2 * 4
正方形边长为3的个数:1 * 3
得出规律:
int sum = 0;
//可以把i当作正方形边长
for(int i = 1; i <= min(n,m); i ++)
sum += (n+1-i)*(m+1-i);
3.求长方形个数(矩形个数-正方形个数)
三、代码展示
#include<bits/stdc++.h>
#define LL long long
#define IOS ios::sync_with_stdio
#define ct cin.tie(0)
using namespace std;
void solve()
{
LL n, m, z=0, rec;
cin >> n >> m;
可以把i当作正方形边长
for(int i = 1; i <= min(n,m); i ++)
sum += (n+1-i)*(m+1-i);
//矩形个数(包括正方形)
rec = (n + 1) * n / 2 * (m + 1) * m / 2;
cout << z << ' ' << rec - z;
}
int main()
{
IOS;//快读
ct;
solve();
return 0;
}