|
把公式写出来就给你章章。可以定义两个变量,比如大立方体边长为N, 挖掉之后的边框宽度为E, 答案是包含这两个变量的表达式。
我的方法是构造所有的端点集合,挖掉空洞里面的点,剩下的点两两配对,如果相邻就算:
var n number;
var e number;
exec :n:=8;
exec :e:=2;
WITH v AS (
SELECT ROWNUM id,x,y,z FROM
(SELECT LEVEL x FROM DUAL CONNECT BY LEVEL<=:n+1)
,(SELECT LEVEL y FROM DUAL CONNECT BY LEVEL<=:n+1)
,(SELECT LEVEL z FROM DUAL CONNECT BY LEVEL<=:n+1)
WHERE NOT (x BETWEEN 2+:e AND :n-:e AND y BETWEEN 2+:e AND :n-:e ---------- 如果三个坐标中的两个处于洞内就去掉
OR x BETWEEN 2+:e AND :n-:e AND z BETWEEN 2+:e AND :n-:e
OR y BETWEEN 2+:e AND :n-:e AND z BETWEEN 2+:e AND :n-:e
)
)
SELECT COUNT(*)
FROM v v1,v v2
WHERE v1.id<v2.id
AND ((v1.x,v1.y,v1.z) IN ((v2.x+1,v2.y,v2.z),(v2.x-1,v2.y,v2.z)) ---- 两点是否相邻
OR (v1.x,v1.y,v1.z) IN ((v2.x,v2.y+1,v2.z),(v2.x,v2.y-1,v2.z))
OR (v1.x,v1.y,v1.z) IN ((v2.x,v2.y,v2.z+1),(v2.x,v2.y,v2.z-1))
)
;
|
|