啥?EXCEL還能領兵作戰?3分鐘讓你學會點兵,無懼敵軍!

相信每個男人都有過“金戈鐵馬,氣吞萬里如虎”的想象

假如有一天,你穿越到楚漢相爭時期成為韓信......

話說秦朝末年,楚漢相爭。有一次,韓信帶領1500名將士與楚王大將李鋒交戰。苦戰一場,楚軍不敵,敗退回營,漢軍也死傷四五百人,於是,韓信整頓兵馬也返回大本營。

當行至一山坡,忽有後軍來報,說有楚軍騎兵追來。只見遠方塵土飛揚,殺聲震天。漢軍本來已十分疲憊,這時隊伍大譁。韓信兵馬到坡頂,見來敵不足五百騎,便急速點兵迎敵。

他命令士兵3人一排,結果多出2名;接著命令士兵5人一排,結果多出3名;他又命令士兵7人一排,結果又多出2名。

韓信馬上向將士們宣佈:我軍有1073名勇士,敵人不足五百,我們居高臨下,以眾擊寡,一定能打敗敵人。漢軍本來就信服自己的統帥,這一來更認為韓信是“神仙下凡”、“神機妙算”。於是士氣大振。一時間旌旗搖動,鼓聲喧天,漢軍步步進逼,楚軍亂作一團。交戰不久,楚軍大敗而逃。

那麼問題來了,韓信是如何知道將士的人數的呢?

假如有一天,你穿越到古代成為韓信,身邊只有一臺裝有EXCEL的電腦,你能夠帶領將士殺出重圍嗎?

我們先把問題翻譯成數學語言:已知一個正整數X,1000

咋一看,用EXCEL似乎辦不到呀,我們先用一個笨方法來解決,窮舉!從1000驗算到1100,不就100個數嘛!

1000=3*333+1,一看就不對,下一個

1001=3*333+2,誒,對了,繼續,1001=5*200+1,不對......

Oh,My God,我佛真主耶穌保佑,這得算到何年何月!可這正是電腦擅長的呀,來看EXCEL是怎麼算的:

解法一

我們現在A列列出1000至1100的數字,然後分別在B,C,D列對3、5、7取餘數,如果餘數分別等於2,3,2就恰好得到了我們的將士人數,

公式為:=MOD($A2,B$1)

驗證公式為:=IF((B2=2)*(C2=3)*(D2=2),"將士總人數為:"&A2,"不符要求")

這樣就求出了我們的將士總人數,借用EXCEL,你也可以帶兵打仗啦!

啥?EXCEL還能領兵作戰?3分鐘讓你學會點兵,無懼敵軍!

解法二

有些同學可能會說,這樣求解表格太大了,不夠優雅,我們來個優雅的!在EXCEL中任意單元格輸入以下公式:

="將士總人數為:"&SUMPRODUCT(ROW(1000:1100),(MOD(ROW(1000:1100),3)=2)*(MOD(ROW(1000:1100),5)=3)*(MOD(ROW(1000:1100),7)=2))

啥?EXCEL還能領兵作戰?3分鐘讓你學會點兵,無懼敵軍!

是不是超級神奇?這個函數的思路和上面的思路是一致的,都是枚舉法的運用,其計算過程可分為以下幾步:

第一步:ROW(1000:1100):生成1000~1100的數組

第二步:用MOD函數分別對其取餘

第三步:當餘數同時滿足除3餘2,除5餘3,除7餘2時,即得到將士人數

本文涉及的函數主要有:

MOD,求餘函數,語法:MOD(被除數,除數)

IF,條件函數,語法:IF(邏輯條件,事件A,[事件B]),當邏輯條件為真時,返回事件A,反之,返回事件B

SUMPRODUCT,數組相乘再求和,語法:SUMPRODUCT(數組1,[數組2]......)

ROW,返回單元格的行號,語法:ROW(單元格引用)

本文涉及的函數都是基礎函數,結合起來卻有妙用,函數是基礎,算法思維才是根本,理解背後的邏輯,解題易如反掌!

問題延伸

“韓信點兵”問題又被稱為“中國剩餘定理”、“大衍求一術”、“鬼谷算”等,和《九章算術》中的“物不知數”問題為同類問題,屬於現代數論中求解一次同餘式方程組問題,

秦九韶所發明的“大衍求一術”,即現代數論中一次同餘式組解法,是中世紀世界數學的最高成就,比西方1801年著名數學家高斯(Gauss,1777—1855年)建立的同餘理論早554年,被西方稱為“中國剩餘定理”。秦九韶不僅為中國贏得無上榮譽,也為世界數學作出了傑出貢獻。若您有興趣,可作進一步瞭解!

歡迎留言探討

我是 EXCEL精選技巧,每天帶您學習一個EXCEL精選技巧,實用,乾貨更有趣!

啥?EXCEL還能領兵作戰?3分鐘讓你學會點兵,無懼敵軍!


分享到:


相關文章: