uva-10177 - (2/3/4)-D Sqr/Rects/Cubes/Boxes?

129 阅读1分钟

题意:

给出正方形的边长,分别求其中的正方形和长方形的个数。同时拓展到三维(正方体),四维的正方形,依旧是求其中的正方体还有长方体的个数。对于四维的概念我也不是很清楚,但是只要找到二维和三维的规律,就可以得到四维的公式。

思路:

首先说一下二维的正方形,边长为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;
}


\