题目描述
有一个n*m方格的棋盘,求其方格包含多少正方形、长方形(此处长方形不包含正方形)
输入格式
输入存在多组测试数据。每组测试数据输入两个整数n,m,数字不超过5000
输出格式
对于每组数据输出一行包含两个整数,分别表示正方形数目和长方形数目
输入样例
输出样例
分析
首先计算对于n *
m的矩形,一共有多少个子矩形
\(从选择边的角度,可以选边长从1到n,一共1 +
2 + …… + n = \frac{(n + 1)(n)}{2}\)
接着计算对于n *
m的矩形,一共有多少个子正方形
从选择边的角度,可以选的边的长度从1到min(n,
m)
正方形的边长每增加1,母矩形的长可以放下对应边长的正方形的个数就减少1,宽同理
最后用总矩形数量减去总正方形数量就得到总长方形数量
第一次写错误
计算总矩形数量和总正方形数量必须要开long才放得下
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); while(input.hasNext()) { int n = input.nextInt(); int m = input.nextInt(); long nSide = (n + 1) * n / 2; long mSide = (m + 1) * m / 2; long totalMatrix = nSide * mSide; int nSqNum = n; int mSqNum = m; long sqNum = 0; for(int sqLength = 1; sqLength <= Math.min(n, m); sqLength++) { sqNum += nSqNum * mSqNum; nSqNum--; mSqNum--; } long matrixNum = totalMatrix - sqNum; System.out.format("%d %d\n", sqNum, matrixNum); } input.close(); } }
|