题意:
给出正方形的边长,分别求其中的正方形和长方形的个数。同时拓展到三维(正方体),四维的正方形,依旧是求其中的正方体还有长方体的个数。对于四维的概念我也不是很清楚,但是只要找到二维和三维的规律,就可以得到四维的公式。
思路:
首先说一下二维的正方形,边长为n的正方形中的正方形个数为1^2+2^2+.....n^2;三维就是三次方,四维就是四次方。
再来说一下二维的正方形中长方形的个数,我是先算出所有正方形和长方形再减去正方形个数。具体这么算:每条边长为n,那么我在这条边上可以选择的边长就有1+2+3+....n种,正方形两条边的话就是(1+2+3+....n)*(1+2+3+....n)种;三维就是乘以三次,四维就是乘以四次。可能有点难理解,比如边长为2,那么我在一条边上可以有三种选择,边长分别是1,1,2,所以长方形和正方形的个数和为9种。
#include<iostream>
#include<cmath>
using namespace std;
typedef long long ll;
int main(){
ll s2,s3,s4,r2,r3,r4;
int n;
while(scanf("%d",&n)!=EOF){s2=s3=s4=r2=r3=r4=0;for(int i=1;i<=n;i++)s2+=pow(i,2);for(int i=1;i<=n;i++)s3+=pow(i,3);for(int i=1;i<=n;i++)s4+=pow(i,4);r2=pow((n+n*n)/2,2)-s2;r3=pow((n+n*n)/2,3)-s3;r4=pow((n+n*n)/2,4)-s4;printf("%lld %lld %lld %lld %lld %lld\n",s2,r2,s3,r3,s4,r4);}
return 0;
}