主要是理解题意:边长为 N 的正方体分割成 N*N*N 个小正方体,求有多少对小正方体的公共顶点数不超过 2。
一对小正方体的公共顶点数有 0、1、2、4 这四种情况,所以只需要计算有 4 个公共顶点的小正方体对数。两个小正方体只有具有公共面时,即在同一 X 轴或同一 Y 轴或同一 Z 轴上时,公共顶点数为 4。
以同一 X 轴为例,一行 N 个小正方体,选择有公共面的两个,共有 N-1 种选法。大正方体边长为 N,所以共有 N*N 个 X 轴,即共有 (N-1)*N*N 组有公共面的小正方体。Y 轴和 Z 轴同理,即大正方体共有 (N-1)*N*N*3 组有公共面的小正方体。
大正方体具有小正方体的组数为 C(N*N*N, 2) = (N*N*N) * (N*N*N - 1) / 2,所以小正方体的公共顶点数不超过 2 的组数为 (N*N*N) * (N*N*N - 1) / 2 - (N-1)*N*N*3。
#include <iostream>
using namespace std;
int main()
{
int N;
while (cin >> N)
{
cout << (N * N * N) * (N * N * N - 1) / 2 - (N - 1) * N * N * 3 << endl;
}
return 0;
}
继续加油。