java P1548 棋盘问题

题目描述
设有一个N×M方格的棋盘(1≤N≤100,1≤M≤100)

求出该棋盘中包含有多少个正方形、多少个长方形(不包括正方形)。

例如:当 N=2,M=3时:

正方形的个数有8个:即边长为11的正方形有66个;

边长为2的正方形有2个。

长方形的个数有10个:

2×1的长方形有4个

1×2的长方形有3个:

3×1的长方形有2个:

3×2的长方形有1个:

如上例:输入:2,3

输出:8,10

输入格式
N,M

输出格式
正方形的个数与长方形的个数

输入输出样例

输入 #1

2 3

输出 #1

8 10


import java.util.*;

public class Main {

	public static void main(String[] args) {

		new Main().sf();
	}

	int n = 0, m = 0;
	int x = 0, y = 0, z = 0, t = 0;

	public void sf() {

		Scanner in = new Scanner(System.in);

		n = in.nextInt();
		m = in.nextInt();
		
		x = ((m+1) * ( n+1) * m * n) / 4;
		
		for (; m >= 1 && n >= 1; m--, n--) {
			y += m*n;
		}

		System.out.println(y + " "+  (x - y));
	}
}

借用的大佬的推导公式

正方形:

边长为1的正方形个数为n*m

边长为2的正方形个数为(n-1)*(m-1) (自己动手想想)

边长为3的正方形为个数(n-2)*(m-2)

边长为min(n,m)的正方形为个数s1=(n-min(n,m)+1)*(m-min(n,m)+1)

然后从边长为1到min(m,m)的正方形个数全部加起来;

长方形:(包括正方形,好像正方形属于长方形来着?)

长为1的长方形(包括正方形)有n个

长为2的长方形(包括正方形)有n-1个

长为n的长方形(包括正方形)有1个

长为1到n的长方形1+2+…+n个

同理 宽为1的长方形(包括正方形)有m个

宽为2的长方形(包括正方形)有m-1个

宽为m的长方形(包括正方形)有1个

宽为1-m的长方形1+2+…+m个

然后把它们乘起来,根据乘法原理,总数s2=((1+n)*(1+m)nm)/4;

题目要求的是“非正方形的长方形”,因此要减去s1;

发布了87 篇原创文章 · 获赞 27 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_43457125/article/details/104743072