邊長為 N 的大正方體,切分為 N³ 個單位小正方體。求:**任意兩個小正方體公共頂點數 ≤ 2 的無序對數**。即兩小塊**不共用整個面**(公共面=4個公共頂點)。
按小正方體在大正方體中的位置分類,計算每類小塊的「鄰面數」(與之共用面的小塊數),用**總數減去鄰面數再減去自身**得到符合條件的配對數,最後除以 2 去重。
| 類別 | 位置 | 數量 | 鄰面數 | 說明 |
|---|---|---|---|---|
| 1. 角塊 | 8 個頂點 | 8 | 3 | 每塊與 3 個面相鄰塊共用面 |
| 2. 棱塊(非角) | 12 條棱,每條 N-2 個 | 12(N-2) | 4 | 兩側面各 2 個鄰面塊 |
| 3. 面心塊(非棱) | 6 個面,每面 (N-2)² 個 | 6(N-2)² | 5 | 面內 4 鄰 + 內層 1 鄰 |
| 4. 內部塊 | 完全內部 | (N-2)³ | 6 | 六面體全被包圍 |
對某類塊,符合條件的配對數 = 總塊數 N³ - 自身 1 - 鄰面塊數。
所有塊配對總和 = Σ [數量ᵢ × (N³ - 1 - 鄰面數ᵢ)]。
每對被算兩次(A 算 B,B 算 A),最終結果除以 2。
Pairs(N) = ½ × [ 8(N³-4) + 12(N-2)(N³-5) + 6(N-2)²(N³-6) + (N-2)³(N³-7) ]
| N | 手算/公式 | 題目給出 |
|---|---|---|
| 1 | 0 | 0 |
| 2 | 16 | 16 |
| 3 | 297 | 297 |
| 4 | 1872 | — |
long long countPairs(int N) {
if (N <= 1) return 0;
long long n = N;
long long n3 = n * n * n;
long long n2 = n - 2;
long long term1 = 8 * (n3 - 4);
long long term2 = 12 * n2 * (n3 - 5);
long long term3 = 6 * n2 * n2 * (n3 - 6);
long long term4 = n2 * n2 * n2 * (n3 - 7);
return (term1 + term2 + term3 + term4) / 2;
}
此題考察**空間想像、分類討論、代數歸納**綜合能力,屬經典面試/競賽好題。