#include<iostream>
using namespace std;
int main(){
int a,b,s=0;
cin>>a>>b;
if(a>b)swap(a,b);
for(int i=a,j=b;i>0;i--,j--){
s+=i*j;
}
cout<<s;
return 0;
}
(以下讲解括号内为备注)
一个长方形(or正方形),如果往里塞一个(不跨过单位正方形边线)任意边长(小于长方形宽)的正方形的话,每当边长加一,那么能塞的方式就会减少。
想得出减少的正方形数量就要找规律(天才可以忽视以下这段废话)
设宽为4,那么宽能塞下的边长为1的正方形数量便是4,边长为2便是3,为3就是2,为4就是1。
看得出来,正方形边长每+1,能塞下的方式就-1.
(长同理)。
if(a>b)swap(a,b);
这串代码是保证a小一些,防止出现负数的情况。
若把for循环里的循环条件改成i>0&&j>0也行,不过会跑得慢一点。
for(int i=a,j=b;i>0;i--,j--){
s+=i*j;
}
这个for循环里,先前的if判断已经保证了a<=b,所以a是宽,b是长,只需判断a是否大于0就可以了。
每次循环都会使假想的正方形边长+1,相对的宽和长能放下正方形的方式也都-1,根据小学学过的乘法,ij乘一乘得出有多少正方形,用变量s累加就行了