題目連接:http://acm.hdu.edu.cn/showproblem.php?pid=1220php
問題描述c++
Cowl擅長解決數學問題。 有一天,一位朋友問他這樣一個問題:給你一個邊長爲N的立方體,它被與其側面平行的平面切割成N * N * N個單位立方體。 兩個單位立方體可能沒有共同點或兩個共同點或四個共同點。 你的工做是計算有多少對不超過兩個公共點的單位立方體。處理到文件的結尾。 測試
輸入spa
會有不少測試用例。 每一個測試用例只會在一行中給出一個立方體的邊長N. N是正整數(1 <= N <= 30)。 code
輸出blog
對於每一個測試用例,您應該在一行中輸出上面描述的對的數量。 ci
示例輸入 1 2 3 數學
示例輸出 0 16 297it
暗示 :結果不會超過int類型。class
解題思路:這是一道組合數學題。題目的意思就是有一個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 }