题目
设有一个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。
输出格式
对于每组输入数据,出该棋盘中包含的正方形个数和长方形个数。
样例
输入样例1
2 3
输出样例
8 10
题解
其实这题完全就是找个规律,由于找到规程太麻烦了我直接上结论
- 长方形里面数正方形的个数计算公式:mn+(m-1)(n-1)+…+(m-x)(n-x) x=min(n,m)-1;
mn表示长度为1的正方形的个数,(m-1)(n-1)表示长度为2的正方形的个数
//长方形里面数长方形的个数计算公式(包含正方形):(1+2+3+…+m)(1+2+3+…+n)=nm(n+1)(m+1)/4
代码
#include
#include
using namespace std;
int i;
int main()
//x=min(m,n)-1
//长方形里面数正方形的个数计算公式:mn+(m-1)(n-1)+…+(m-x)(n-x)
// mn表示长度为1的正方形的个数,(m-1)(n-1)表示长度为2的正方形的个数。。。。。。
//长方形里面数长方形的个数计算公式(包含正方形):(1+2+3+…+m)(1+2+3+…+n)=nm(n+1)(m+1)/4
{
int x=0,y=0,mins;//x正方形,y长方形
int n,m;
cin>>n>>m;
mins=min(n,m);
#include <iostream>
#include<cmath>
using namespace std;
int i;
int main()
//x=min(m,n)-1
//长方形里面数正方形的个数计算公式:m*n+(m-1)*(n-1)+.....+(m-x)*(n-x)
// m*n表示长度为1的正方形的个数,(m-1)*(n-1)表示长度为2的正方形的个数。。。。。。
//长方形里面数长方形的个数计算公式(包含正方形):(1+2+3+...+m)*(1+2+3+...+n)=n*m(n+1)*(m+1)/4
{
int x=0,y=0,mins;//x正方形,y长方形
int n,m;
cin>>n>>m;
mins=min(n,m);
for(i=0;i<=mins;i++)
{
x=x+(n-i)*(m-i);
}
y=(m+1)*m*(n+1)*n/4-x;
cout<<x<<" "<<y<<endl;
}
=x+(n-i)*(m-i);
}
y=(m+1)m(n+1)*n/4-x;
cout<<x<<" "<<y<<endl;
}
}