2329 - 棋盘方格
设有一个n*m方格的棋盘(1≤m,n≤100)。
求出该棋盘中包含多少个正方形、多少个长方形(不包括正方形)。
例如:
当n=2,m=3时

<br />
正方形的个数有<span>8</span>个,即边长为<span>1</span>的正方形有<span>6</span>个,边长为2的正方形有2个。
长方形的个数有10个:
2*1的长方形有4个;<img src="http://noi.acmclub.com/attached/image/20140109/20140109160025_60435.jpg" alt="" />
1*2的长方形有3个;<img src="http://tk.hustoj.com:80/attached/image/20140109/20140109160119_48455.jpg" alt="" />
3*1的长方形有2个;<img src="http://tk.hustoj.com:80/attached/image/20140109/20140109160140_93063.jpg" alt="" />
3*2的长方形有1个。<img src="http://tk.hustoj.com:80/attached/image/20140109/20140109160158_92741.jpg" alt="" />
<br />
<br />
Input
每个测试文件只包含一组测试数据,每组输入两个正整数n和m。
Output
对于每组输入数据,出该棋盘中包含的正方形个数和长方形个数。
Examples
Input
2 3
Output
8 10
Solution C
#include<stdio.h> int main() { int n,m,i,j,s=0,k=0,t; scanf("%d%d",&n,&m); if(n>m) { t=n;n=m;m=t; } for(i=0;i<n;i++) s+=(n-i)*(m-i); for(i=0;i<n;i++) for(j=0;j<m;j++) if(i==j) ; else k+=(n-i)*(m-j); printf("%d %d",s,k); return 0; }
Solution C++
#include<iostream> #include<cmath> using namespace std; int main() { int t=0,r=0; int m,n,min; cin >> n >> m; min = n>m ? m:n; for(int i=0; i<min; ++i) t+= (n-i)*(m-i); for(int i=0; i<n; ++i) for(int j=0; j<m; ++j) { r+=(n-i)*(m-j); } cout << t << " " << r-t << endl; return 0; }