HDU 1220(Cube)

主要是理解题意:边长为 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;
}

继续加油。

发布了152 篇原创文章 · 获赞 1 · 访问量 7629

猜你喜欢

转载自blog.csdn.net/Intelligence1028/article/details/104655586