前兩天數學建模校內選拔賽的題目中,有一問是讓求出最短路徑以及經過的方格數,而最短路徑是很多段折線,需要計算每段折線經過的方格數再加起來。
本來打算直接在程式裡加幾行**計算的,後來發現可以直接推導出結論:
對於乙個長度為m
mm,寬度為n
nn的矩形,均分成m∗n
m*nm∗
n個小方格,則對角線經過的小方格數量為m+n
−(m,
n)m+n-(m,n)
m+n−(m
,n),其中(m,
n)(m,n)
(m,n)為m
mm和n
nn的最大公約數。
證明:①先考慮m
mm和n
nn互質的情況,即(m,
n)=1
(m,n)=1
(m,n)=
1時,由於對角線的斜率為k=n
mk=\frac
k=mn
為既約分數,顯然對角線除了兩個端點外不會經過內部格點。
而對角線與m+1
m+1m+
1條豎直線有m+1
m+1m+
1個交點,與n+1
n+1n+
1條水平線有n+1
n+1n+
1個交點,由於對角線的兩個端點被重複計算,所以對角線與所以格線共有m+1
+n+1
−2=m
+nm+1+n+1-2=m+n
m+1+n+
1−2=
m+n個交點。
而這m +n
m+nm+
n個交點將對角線分為m+n
−1m+n-1
m+n−
1段,每一小段都與包含它的小方格一一對應,所以對角線共經過了m+n
−1m+n-1
m+n−
1個小方格。
②再考慮m
mm和n
nn不互質的情況,即(m,
n)=d
>
1(m,n)=d>1
(m,n)=
d>
1時,由於對角線的斜率為k=n
m=n/
dm/d
k=\frac=\frac
k=mn=
m/dn
/d,所以對角線一共經過了d
dd個長為m
d\frac
dm,寬為n
d\frac
dn的小矩形。取長為m
d\frac
dm,寬為n
d\frac
dn的小矩形作為研究物件,每乙個小矩形都是長寬互質的。使用①中的結論,對角線在每個小矩形中經過的小方格數為md+
nd−1
\frac+\frac-1
dm+dn
−1,所以一共經過了d∗(
md+n
d−1)
=m+n
−dd*(\frac+\frac-1)=m+n-d
d∗(dm
+dn
−1)=
m+n−
d個小方格。
綜合①②,對於乙個長度為m
mm,寬度為n
nn的矩形,均分成m∗n
m*nm∗
n個小方格,則對角線經過的小方格數量為m+n
−(m,
n)m+n-(m,n)
m+n−(m
,n),其中(m,
n)(m,n)
(m,n)為m
mm和n
nn的最大公約數。
對角線的延伸
今天有點空閒時間,把劉未鵬的 康托爾 哥德爾 圖靈 永恆的金色對角線 又看了一遍。雖然之前看過很多遍了,也在斷斷續續地看 geb 但是每次看這篇文章,都還會引起一些思考。開始先介紹了圖靈停機問題和y combinator,這兩段都總結的很好,深入淺出,比我在別的地方看到的要清楚很多。後面介紹了哥德爾...
同行列對角線的格仔
描述 輸入三個自然數n,i,j 1 i n,1 j n 輸出在乙個n n格的棋盤中 行列均從1開始編號 與格仔 i,j 同行 同列 同一對角線的所有格仔的位置。如 n 4,i 2,j 3表示了棋盤中的第二行第三列的格仔,如下圖 當n 4,i 2,j 3時,輸出的結果是 2,1 2,2 2,3 2,4...
同行列對角線的格仔
時間限制 1 sec 記憶體限制 128 mb 提交 14 解決 6 提交 狀態 討論版 輸入三個自然數n,i,j 1 i n,1 j n 輸出在乙個n n格的棋盤中 行列均從1開始編號 與格仔 i,j 同行 同列 同一對角線的所有格仔的位置。如 n 4,i 2,j 3表示了棋盤中的第二行第三列的格...