描述
相傳韓信才智過人,從不直接清點自己軍隊的人數,只要讓士兵先後以三人一排、五人一排、七人一排地變換隊形,而他每次只掠一眼隊伍的排尾就知道總人數了。輸入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 23int
main()
韓信點兵python演算法 韓信點兵演算法
秦朝末年,楚漢相爭。一次,韓信將1500名將士與楚王大將李鋒交戰。苦戰一場,楚軍不敵,敗退回營,漢軍也死傷四五百人,於是韓信整頓兵馬也返回大本營。當行至一山坡,忽有後軍來報,說有楚軍騎兵追來。只見遠方塵土飛揚,殺聲震天。漢軍本來已十分疲憊,這時隊伍大譁。韓信兵馬到坡頂,見來敵不足五百騎,便急速點兵迎...
韓信點兵演算法
孫子算經 中給出這類問題的解法 三三數之剩二,則置一百四十 五五數之剩三,置六十三 七七數之剩二,置三十 並之得二百三十三,以二百一十減之,即得。凡三三數之剩一,則置七十 五五數之剩一,則置二十一 七七數之剩一,則置十五,一百六以上,以一百五減之,即得。用現代語言說明這個解法就是 首先找出能被5與7...
韓信點兵演算法
題目 韓信點兵 10 分 在中國數學史上,廣泛流傳著乙個 韓信點兵 的故事 韓信是漢高祖劉邦手下的大將,他英勇善戰,智謀超群,為漢朝建立了卓越的功勞。據說韓信的數學水平也非常高超,他在點兵的時候,為了知道有多少兵,同時又能保住軍事機密,便讓士兵排隊報數 按從1至5報數,記下最末乙個士兵報的數為1 再...