Cube
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 1672 Accepted Submission(s): 1321
Problem Description
Cowl is good at solving math problems. One day a friend asked him such a question: You are given a cube whose edge length is N, it is cut by the planes that was paralleled to its side planes into N * N * N unit cubes. Two unit cubes may have no common points or two common points or four common points. Your job is to calculate how many pairs of unit cubes that have no more than two common points.
Process to the end of file.
Process to the end of file.
Input
There will be many test cases. Each test case will only give the edge length N of a cube in one line. N is a positive integer(1<=N<=30).
Output
For each test case, you should output the number of pairs that was described above in one line.
Sample Input
1 2 3
Sample Output
0 16 297The results will not exceed int type.HintHint
Author
Gao Bo
Source
Recommend
意思是,求n*n*n的正方体内有多少对公共定点不超过2的1*1*1正方块,也就是说求n*n*n的正方体内有多少对不相邻的正方块,可以先求的,在不考虑重复的情况下,共有(n*n*n)*(n*n*n-1)对正方块,考虑每个定点相邻的正方块对数有3对,即减去8*3,在考虑,每个每条棱上每个相邻的有4对,有12 条棱,减去(n-2)*4*12,再考虑每个平面上每个正方块相邻的有5 对,减去(n-2)*(n-2)*5*6,再考虑每个不暴露在外的正方块相邻的有6个,减去(n-2)*(n-2)*(n-2)*6,最后结果再除以2,去掉重复的即可:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
__int64 num1,n,num2,i,j,k,l,m;
int main()
{
while(scanf("%I64d",&n)!=EOF)
{
num1=(n*n*n)*(n*n*n-1);
num2=8*3+(n-2)*4*12+(n-2)*(n-2)*5*6+(n-2)*(n-2)*(n-2)*6;
m=num1-num2;
m/=2;
printf("%I64d\n",m);
}
}