题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1220
问题描述
Cowl擅长解决数学问题。 有一天,一位朋友问他这样一个问题:给你一个边长为N的立方体,它被与其侧面平行的平面切割成N * N * N个单位立方体。 两个单位立方体可能没有共同点或两个共同点或四个共同点。 你的工作是计算有多少对不超过两个公共点的单位立方体。处理到文件的结尾。
输入
会有很多测试用例。 每个测试用例只会在一行中给出一个立方体的边长N. N是正整数(1 <= N <= 30)。
输出
对于每个测试用例,您应该在一行中输出上面描述的对的数量。
示例输入 1 2 3
示例输出 0 16 297
暗示 :结果不会超过int类型。
解题思路:这是一道组合数学题。题目的意思就是有一个N*N*N的立方体,将其分成1*1*1的单位立方体,则任意两个立方体的交点(顶点)个数为0,1,2,4个,现在要求交点数小于等于2个的立方体对数有多少对。N*N*N的立方体可以分成N*N*N个单位立方体,而任选两个立方体组成的情况一共有C(N*N*N,2)对 (即:N^3*(N^3-1)/2对)。公共点为4的对数:一列有n-1对(n个小方块,相邻的两个为一对符合要求),一个面的共有 n^2列,选上面和左面,前面三个方向,同理可得,故总数为:3*n*n*(n-1)。所以不超过两个公共点的单位立方体的对数为N^3*(N^3-1)/2-3*n*n*(n-1)。
AC代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 int n; 6 while(cin>>n) 7 cout<<(n*n*n*(n*n*n-1)/2-3*n*n*(n-1))<<endl;//推导公式 8 return 0; 9 }