韓信點兵演算法

2022-08-20 01:24:10 字數 1071 閱讀 1551

描述

相傳韓信才智過人,從不直接清點自己軍隊的人數,只要讓士兵先後以三人一排、五人一排、七人一排地變換隊形,而他每次只掠一眼隊伍的排尾就知道總人數了。輸入3個非負整數a,b,c ,表示每種隊形排尾的人數(a<3,b<5,c<7),輸出總人數的最小值(或報告無解)。已知總人數不小於10,不超過100 。

輸入

輸入3個非負整數a,b,c ,表示每種隊形排尾的人數(a<3,b<5,c<7)。例如,輸入:2 4 5

輸出

輸出總人數的最小值(或報告無解,即輸出noanswer)。例項,輸出:89

樣例輸入

2 1 6

樣例輸出

定理1 如a被n除所得的餘數等b被n除所得的餘數,c被n除所得的餘數等於d被n除所得的餘數, 則ac被n除所得的餘數等於b d被n除所得的餘數。

用同余式敘述就是:

如a≡b(mod n ),c≡d(mod n )

則ac≡b d(mod n )

定理2 被除數a加上或減去除數b的倍數,再除以b,餘數r不變。即

如a ≡ r(mod b ),則a ± b n≡r(mod b )

例如70≡1(mod 3 )可得70±10×3≡1(mod 3 ) 

【韓信點兵法口訣的原理】

①能被5,7除盡數是35k,其中k=2,即70除3正好餘1,70a 除3正好餘a。

②能被3,7除盡數是21k,其中k=1,即21除5正好餘1,21b 除5正好餘b。

③能被3,5除盡數是15k,其中k=1,即15除7正好餘1,15c 除7正好餘c。

這樣——

根據①可知 70a+21b+15c 除3正好餘a。

根據②可知 70a+21b+15c 除5正好餘b。

根據③可知 70a+21b+15c 除7正好餘c。 

(70a+21b+15c)%(3*5*7)為最小值,然後再判斷最小值是否滿足條件。

1 #include 2

3int

main()

韓信點兵python演算法 韓信點兵演算法

秦朝末年,楚漢相爭。一次,韓信將1500名將士與楚王大將李鋒交戰。苦戰一場,楚軍不敵,敗退回營,漢軍也死傷四五百人,於是韓信整頓兵馬也返回大本營。當行至一山坡,忽有後軍來報,說有楚軍騎兵追來。只見遠方塵土飛揚,殺聲震天。漢軍本來已十分疲憊,這時隊伍大譁。韓信兵馬到坡頂,見來敵不足五百騎,便急速點兵迎...

韓信點兵演算法

孫子算經 中給出這類問題的解法 三三數之剩二,則置一百四十 五五數之剩三,置六十三 七七數之剩二,置三十 並之得二百三十三,以二百一十減之,即得。凡三三數之剩一,則置七十 五五數之剩一,則置二十一 七七數之剩一,則置十五,一百六以上,以一百五減之,即得。用現代語言說明這個解法就是 首先找出能被5與7...

韓信點兵演算法

題目 韓信點兵 10 分 在中國數學史上,廣泛流傳著乙個 韓信點兵 的故事 韓信是漢高祖劉邦手下的大將,他英勇善戰,智謀超群,為漢朝建立了卓越的功勞。據說韓信的數學水平也非常高超,他在點兵的時候,為了知道有多少兵,同時又能保住軍事機密,便讓士兵排隊報數 按從1至5報數,記下最末乙個士兵報的數為1 再...