题目背景
1997年普及组第一题
题目描述
有一个 n×m 方格的棋盘,求其方格包含多少正方形、长方形(不包含正方形)。
输入格式
一行,两个正整数 n,m(n≤5000,m≤5000)。
输出格式
一行,两个正整数,分别表示方格包含多少正方形、长方形(不包含正方形)。
输入输出样例
输入 #1复制
2 3
输出 #1复制
8 10
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
long count_z = 0,count_c = 0;
for(int i = 0;i < n;i++) {
for(int j = 0;j < m;j++) {
if(i == j) count_z += (n - i)*(m - j);
else count_c += (n - i)*(m - j);
}
}
System.out.print(count_z + " " + count_c);
}
}
题解分析:(n - i)*(m - j)//这里解释一下是什么意思:假如i为1,j为0,那么n - 1,就是将相邻方格两个方格看作一组,那么横向从左到右有n - 1组,j - 0即列方向上还是有m个方格,那么此时n*m个方格中有(n-1)*j 个2*1 的方格组。以此类推,通过i和j的不断变化实现方格组的变化,并且当i = j时,方格组是正方形。