1,题目:
题目描述:
有一个n*m方格的棋盘,求其方格包含多少正方形、长方形(此处长方形不包含正方形)
输入格式:
输入存在多组测试数据。每组测试数据输入两个整数n,m,数字不超过5000
输出格式:
对于每组数据输出一行包含两个整数,分别表示正方形数目和长方形数目
输入样例:2 3
输出样例:8 10
2,解题思路:
首先对题目进行分析,要输出正方形数目还有长方形的数目,可以使用枚举进行解题,也就是多重循环
就以输入2 3为案例
当正方形的边长为1时,有2*3=6个
当正方形的边长为2时,有(3-1)*(2-1)=2个
如果在把这个范围扩大的话,可以发现规律
正方形边长为1时 正方形的个数 (n-0)*(m-0)
正方形边长为2时 正方形的个数为(n-1)*(m-1)
正方形边长为3时 正方形的个数为(n-2)*(m-2)
…..
这样我们就可以知道得到正方形个数的规律了,正方形最大的边长就是n,m中小的那个
接下来就是长方形,我们知道矩形包括正方形和长方形
我们就可以求出矩形的个数减去正方形的个数 矩形的个数就是
双重循环中的 (n-i)*(m-j)
得到的总数减去正方形的个数就得到长方形的个数了
3,代码:
#include <iostream>
using namespace std;
int main()
{
int n, m;
while (cin >> n >> m)
{
long long a = 0, b = 0; //a是正方形计数器 b是矩形计数器
long long x = min(n, m);
long long y = max(n, m);
for (long long i = 0; i < x; i++) //第一层循环让x=较小的数 来求正方形的个数
{
for (long long j = 0; j < y; j++) //双重循环是来求矩形个数
{
b += (x - i) * (y - j);
}
a += (n - i) * (m - i); //正方形个数
}
cout << a << " " << b - a << endl;
}
}
4,运行测试:
版权声明:本文为s3088784247原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。