题目
题目分析
1)正方体和周围3个正方体相邻,总个数3 × 8;
2)正方体和周围4个正方体相邻,总个数4×(n-2)×12;
3)正方体和周围5个正方体相邻,总个数5×6×(n×n -4×n+4);
4)正方体和周围6个正方体相邻,总个数6 ×(n×n×n - n×n×6+n×12-8);
最后把这4个情况求和再除以2(因为求的是对数而不是个数)。
解法代码
#include<bits/stdc++.h>
using namespace std;
// 分割立方体——逆向思维,用总共的两两关系减去共有4个公共点的关系数
using ll = long long;
int n;
int main() {
cin>>n;
if(n==1){
cout<<0;
return 0;
}
ll sum = n*n*n*(n*n*n-1)/2;
int edge3 = 8;// 与三个小正方体直接邻接的正方体数量(以面邻接而不是边)
int ans3 = 3*edge3;
int edge4 = (n-2)*12;
int ans4 = 4*edge4;
int edge5 = 6*(n*n-4*n+4);
int ans5 = 5*edge5;
int edge6 = (n*n*n-n*n*6+n*12-8);
int ans6 = 6*edge6;
ll ans = ans3+ans4+ans5+ans6;
cout<<(sum-ans/2);// 除2是因为求的是对数而不是个数
return 0;
}