經典演算法題每日演練 第二題 五家共井

2021-07-29 08:24:34 字數 1738 閱讀 2902

古代數學巨著《九章算數》中有這麼一道題叫「五家共井,甲二綆(汲水用的井繩)不足,如(接上)乙一綆;乙三綆不足,如丙一綆;

丙四綆不足,如丁一綆;丁五綆不足,如戊一綆;戊六綆不足,如甲一綆,皆及。

意思就是說五家人共用一口井,甲家的繩子用兩條不夠,還要再用乙家的繩子一條才能打到井水;乙家的繩子用三條不夠,還要再用丙家的繩子

一條才能打到井水;丙家的繩子用四條不夠,還要再用丁家的繩子一條才能打到井水;丁家的繩子用五條不夠,還要再用戊家的繩子一條才能打

到井水;戊家的繩子用六條不夠,還要再用甲家的繩子一條才能打到井水。

最後問:井有多深?每家的繩子各有多長?

我們設井深為h,各家分別為a,b,c,d,e,則可以列出如下方程組:

2a+b=h   ①

3b+c=h   ②

4c+d=h   ③

5d+e=h   ④

6e+a=h   ⑤

首先我們看下普通青年的想法,他們的想法是找a,b,c,d,e之間的對應關係。

依次將②代入①,③代入②,④代入③,⑤代入④可得如下方程組:

a=b+c/2  

b=c+d/3   

c=d+e/4   

d=e+a/5   

從計算機的角度來說,我不希望有小數的出現,所以我可推斷: c一定是2的倍數,d一定是3的倍數,e一定是4的倍數,a一定是5的倍數,根據這種關係我們

就可以有如下**:

同樣我們的時間複雜度是o(n2),急需優化。

我們再來看看文藝青年的想法,他們的想法是找a,b,c,d,e中的某個數與h的對應關係。

比如我就找c與h的對應關係,上面的①②③④⑤可寫成如下方程組:

b=h-2a   ⑥

c=h-3b   ⑦

d=h-4c   ⑧

e=h-5d   ⑨

a=h-6e   ⑩

將⑥,⑧,⑨,⑩分別代入⑦,一陣痙攣後可知:

c=(148/721)h

上面的公式也就表明了c和h的比例關係,我們令 h=721k,則 c=148k,將其代入⑥,⑦,⑧,⑨,⑩可得如下方程組

a=265k

b=191k

c=148k

d=129k

e=76k

x=721k

又因為k>0,所以題目有無數個解。這裡我就取0

相信大家以後遇到類似的問題,應該會胸有成竹了。

第二題 五家共井

古代數學巨著 九章算數 中有這麼一道題叫 五家共井,甲二綆 汲水用的井繩 不足,如 接上 乙一綆 乙三綆不足,如丙一綆 丙四綆不足,如丁一綆 丁五綆不足,如戊一綆 戊六綆不足,如甲一綆,皆及。意思就是說五家人共用一口井,甲家的繩子用兩條不夠,還要再用乙家的繩子一條才能打到井水 乙家的繩子用三條不夠,...

經典演算法題每日演練 第二十四題 梳排序

這篇再看看乙個經典的排序,梳排序,為什麼取名為梳,可能每個梳都有自己的gap吧,大梳子gap大一點,小梳子gap小一點。氣泡排序上我們的選擇是相鄰的兩個數做比較,就是他們的gap為1,其實梳排序提出了不同的觀點,如果將這裡的gap設定為一定的大小,效率反而必gap 1要高效的多。下面我們看看具體思想...

經典演算法題每日演練 第二十四題 梳排序

原文 經典演算法題每日演練 第二十四題 梳排序 這篇再看看乙個經典的排序,梳排序,為什麼取名為梳,可能每個梳都有自己的gap吧,大梳子gap大一點,小梳子gap小一點。氣泡排序上我們的選擇是相鄰的兩個數做比較,就是他們的gap為1,其實梳排序提出了不同的觀點,如果將這裡的gap設定為一定的大小,效率...