问题0:求几何图形的个数
问题描述
设有n*m个方格的棋盘(1<=m,n<=100),求出该棋盘中包含多少个正方形、多少个长方形(不包括正方形)。
例如:当n=3,m=2 时
正方形的个数有8个;即边长为1的正方形有6个;边长为2的正方形有2个。
长方形的个数有10个;即2*1的长方形有4个;1*2的长方形有3个;3*1的长方形有2个;3*2的年长方形有1个。
程序要求:输入n和m,输出正方形的个数和长方形的个数。
例如: 输入:3 2 输出: 8 10
运行示例:
input n,m:1 1 output: 1 0
input n,m:4 5 output:40 110
input n,m:10 10 output:385 2640
input n,m:30 20 output:4970 92680
input n,m:50 50 output:42925 1582700
问题分析
我们可以把棋盘放到坐标系中考虑。如图所示,为3*2的方格。在坐标系中,每两点即可表示一个矩形。如(2,1)(0,0)表示1*2的矩形。这里我们规定:用右上角的点A(x1,y1)和左下角的点B(x2,y2)来确定一个矩形,并且保证x2<x1,y2<y1.若x1-x2=y1-y2则A,B确定的是一个正方形,否则是一个领边不等的长方形。
数据结构
矩形的数据结构Rectangle=(P,R)
其中:P={0,1,2……n} n=max(M,N)
R={A,B}
A={<x1,y1>|1<=x1<=M,1<=y1<=N}
B={<x2,y2>|0<=x2<=x1,0<=y2<=y1 }
正方形的数据结构Square=(P,R)
其中: