正方形与矩形
时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte
总提交:157 测试通过:82
描述
设有一个n*m方格的棋盘(1≤m,n≤100)。求出该棋盘中包含多少个正方形、多少个长方形(不包括正方形)。
例如:当n=2,m=3时,正方形的个数有8个,即边长为1的有6个,边长为2的有2个。矩形的个数有10个,即2*1的长方形有4个,1*2的长方形有3个,3*1的长方形有2个,3*2的长方形有1个。
输入
题目包含多组输入,输入包括两个整数,n和m。n,m=0时输入结束。
输出
正方形的个数和矩形的个数
样例输入
2 3
0 0
样例输出
8 10
题目来源
NUAA
分析:乍一看没有什么思路但仔细分析就可以看出门路来了。总共有矩形是m+1个边取2乘以n+1个边取2得来的,其中正方形的通项公式是An=n^2+n*d(d 是n与m的差,n较小),得到S=n(n+1)(2n+1)/6+n(n+1)d/2 得到最终结果。
总体说来这个题比较简单,如何使代码更少就是解题的关键了,AC了。
#include <stdio.h>
#define a m*(m+1)
int main()
{
int n,m,d,c;
while (scanf("%d%d",&n,&m),n!=0||m!=0)
{
if (n<m)
{
d=m;
m=n;
n=d;
}
d=n-m;
c=a*(2*m+1)/6+a*d/2;
printf("%d %d\n",c,a*n*(n+1)/4-c);
}
}
注:c为正方形的个数。开始有个比大小的过程。