算法題——立方體的體對角線穿過多少個正方體?


這道題是筆者當年參加競賽的題目,多年來一直未得其解,久久不能釋懷。近日,重新拿起該題細細研究,終於將其解出,著文以記之。

 

問題描述:

長方體長X,寬Y,高Z。X、Y、Z都是正整數。長方體由長1、寬1、高1的正方體堆積而成。那么長方體的體對角線穿過多少個正方體?

 

這個題考量三維空間的想象。近日研究的時候,嘗試先考量二維的情況,在求解出二維的情況下,在推廣到三維里。下面是二維情況下的問題描述

 

長方形長X,寬Y。X、Y都是正整數。長方形由長1、寬1的正方形組成。那么長方形的對角線穿過多少個正方形?

 

 

以實例說明。長方形長6,寬4。長方形由長1、寬1的正方形組成。那么長方形的對角線穿過多少個正方形?

這個還是比較簡單的,直接用圖表示即可,如下圖所示:

 

1

 

如上圖所示,對角線一共穿過8個正方形(灰色部分)。但是,我們不可能每個問題都畫圖表示,比如長777,寬581的長方形的解就很難畫圖表示(數字太大,不容易精確表示)。

仔細看看,這8個正方形實際上把對角線分成了8段。線段的端點是對角線和水平線(或豎直線)的交點。

於是,問題似乎可以轉化成

要求穿過多少個正方形,實際上相當於求有多少個線段

要求有多少個線段,實際上相當於求對角線和水平線和垂直線的交點的個數

 

把上圖放在平面直角坐標系中,左下角坐標為(0,0),右上角坐標為(6,4)

則對角線的直線方程為

 

clip_image002

 

和我們一般想象中的直線方程不太一樣。沒關系,首先這個是正確的直線方程,其次是為了和后面的三維中的直線方程的表現形式統一。

我們把對角線和水平線(或豎直線)的交點在圖上標示出來(為了后文的描述方便,我用不同顏色標示點)

 

2

左下角的起點用灰色標示,紅色的點標示對角線和豎直線的交點(交點的橫坐標是整數),綠色的點標示對角線和水平線的交點(交點的縱坐標是整數)

起點不算,則穿過的方塊數和線段數和點的個數一致(都是8個)。

 

紅色點的坐標(橫坐標是整數)分別是:

clip_image002[4]

個數和長方形的長的數值是一致的(是6)

 

綠色點的坐標(縱坐標是整數)分別是:

clip_image002[6]

個數和長方形的寬的數值是一致的(是4)

 

可以看出,紅色點和綠色點有2個點是重合的(圖上用半紅半綠的點標示),因此這些點合在一起就是如下(按照和起點的遠近來進行排序)

clip_image002[8]

 

於是該問題的求解過程可以如下表示:

1、求出橫坐標是整數的點的個數,就是長方形長的數值。本題是6

2、求出縱坐標是整數的點的個數,就是長方體寬的數值。本題是4

3、求出步驟1和步驟2中重合的點的個數,也就是橫縱坐標都是整數的點的個數。本題是2

4、問題的答案:步驟1的答案+步驟2的答案-步驟3的答案。本題是6+4-2=8

 

步驟1、2、3、4中,關鍵是步驟3,如何求出步驟1和步驟2中重合的點的個數,也就是橫縱坐標都是整數的點的個數。

 

最大公約數:正整數a和b,若a能被b整除,則a是b的倍數,b是a的約數。正整數a和b中約數最大的那個稱為a和b的最大公約數,記作gcd(a,b)

 

本題中,(4,6)=2,正好是步驟3的答數,是巧合么?不是,接下來我們來證明。

 

證明:長X、寬Y的長方形,對角線經過雙整數點(橫縱坐標都是整數)的個數為gcd(X,Y)(注:不算起點)

證:令x1=X/gcd(X,Y),y1=Y/gcd(X,Y)。則x1和y1都是整數,且x1和y1互質(除1以外,沒有公約數)。

對角線所在的直線方程為

clip_image002

當x取整數時(1≤x≤X)時,要使y也是整數,則x必須取x1的倍數(這樣才能把分母完全約掉)

而在1到X之間,x1的倍數一共有gcd(X,Y)個

證明完畢

 

綜上所述:長方形長X,寬Y。X、Y都是正整數。長方形由長1、寬1的正方形組成。那么長方形的對角線穿過多少個正方形?

其解為:Ans=X+Y-gcd(X,Y),可以用下圖表示

3

 

例如:

長6,寬4的長方形的對角線穿過6+4-gcd(6,4)=6+4-2=8個正方形

長5,寬3的長方形的對角線穿過5+3-gcd(5,3)=5+3-1=7個正方形

長12,寬8的長方形的對角線穿過12+8-gcd(12,8)=12+8-4=16個正方形

 

擴展到三維。長方體長X,寬Y,高Z。X、Y、Z都是正整數。長方體由長1、寬1、高1的正方體堆積而成。那么長方體的體對角線穿過多少個正方體?

長X、寬Y、高Z的立方體的體對角線的直線方程是

clip_image002[5]

這個方程雖然有點怪,但是學過空間解析幾何的都明白這個方程的正確性

 

求解的過程和二維的類似,也是找尋坐標是整數的點。可以用下圖表示:

4

 

 

其解為:Ans=X+Y+Z-gcd(X,Y)-gcd(X,Z)-gcd(Y,Z)+gcd(X,Y,Z)

例如:

長5,寬3,高4的長方體的體對角線穿過5+3+4-gcd(5,3)-gcd(5,4)-gcd(3,4)+gcd(5,3,4)=5+3+4-1-1-1+1=10個正方體

長8,寬6,高3的長方體的體對角線穿過8+6+3-gcd(8,6)-gcd(8,3)-gcd(6,3)+gcd(8,6,3)=8+6+3-2-1-3+1=12個正方體

長12,寬8,高6的長方體的體對角線穿過12+8+6-gcd(12,8)-gcd(12,6)-gcd(8,6)+gcd(12,8,6)=12+8+6-4-6-2+2=16個正方體

 

 

下圖是長5,寬3,高4的長方體的體對角線穿過正方體的示意圖,一共10個正方體,你看清了么?

3-4-5

 

 

 

這個題歷時若干年,總是百思不得其解。也是今朝靈光一閃,終於把該題解決了。也總算是一塊石頭落了地


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM