当前位置: 代码迷 >> 综合 >> uva-10177 - (2/3/4)-D Sqr/Rects/Cubes/Boxes?
  详细解决方案

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

热度:87   发布时间:2023-11-06 19:03:19.0

题意:

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

思路:

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