5匹のサルはビーチでバナナの束を見つけ、次の日、次の日の朝を分割することを決めあり、最初のサルは最初に来た、それは左と右の細分切り離せない、彼は海に向かって投げ、ちょうどこと5つの部分に分け、それが行くように彼らの一部になります。また、同じ方法を使用して、同じ問題に遭遇しましたが、1つの後に捨てられる2,3,4,5-サルは、それは5つの部分に分けることを起こる、小さいだけで少なくともバナナのこの山を尋ねますか?
道
クラスタイトルなし{ 公共 静的 ボイドメイン(文字列[]引数){ int型の数。 int型のカウント= 0 ; int型私は、 以下のための(I = 6 ;; I = I + 5 ){ 数 = I。 カウント = 0を。 ながら(( - 1)%5 == 0 ){ カウント ++ 。 数 =(数-1)/ 10 * 4 。 場合(== 5カウント){ 破ります。 } } であれば(== 5をカウント{) 破ります。 } } のSystem.out.println(I)。 } }
第二の方法
クラスタイトルなし{ 公共 静的 ボイドメイン(文字列[]引数){ System.out.printlnは( +カウント( "ビーチで最小")+ "バナナ" ); } パブリック 静的 int型COUNT(){ 代表// n個各分配部の、K 1代表 INT。N- = 5、K = 1、分= 0 ; ブールフラグに= falseに;
// jはサルの最後の割り当ての後にバナナの数を表す int型 = 1 J ; のため(;; J ++ ){ 分 = J * + N- K; のため(INT I = 1; I <N-; I ++ ){ もし(%分(N-1)== 0 ){ 分 =分* N /(N-1)+ K。 } 他{ 破ります。 } もし(I == N-1 ){ フラグ = 真。 破ります; } } もし(フラグ== 真){ 破ります。 } } のSystem.out.println(J)。 返す分。 } }
逆推力装置の検証
クラスタイトルなし{ 公共 静的 ボイドメイン(文字列[]引数){ するSystem.out.println( "---------" +(リバース(3121,5)== 1 "成功":? "失敗" )+ "----------" ); } パブリック 静的 INTリバース(INT N-、INT M){ // 各テイク後に残っNUM INT。NUM = N - 1 - (N - 1) / 5 ; M - ; IF(M> 0 ){ // 各バナナは5で割り切れることができる取る IF((N - 1)5%== 0 ){ リターンリバース(NUM、M)。 } さもなければ{ 戻り 0 ; } } 他{ リターン 1 。 } } }
少なくとも3121本のバナナ、思考:復路
セットポイント翌日各サルバナナ
5aは*(5/4)+1:50匹のサルの前にはない存在取る
第四猿はかかりませんでしまでそこ:5(a)×(5/4)²+ 5/4 + 1
第三のサルの前に取るていない:5A *を(5/4)³+ (5/4)²+ 5/4 + 1
秒猿以前に取っていない:5A *を(5/4)^ 4 +(5/4)³+(5/4)²+ 5/4 + 1
最初のサルの前に服用しないでいる:5A *を(5/4) ^(5/4)+。4 ^(5/4)+。5³+(5/4)²。5 + / +。1. 4 .........①の
①5は、リア式等比級数でありますそこ総和:5(a)*(5/4)^ 5 + 4 *(5/4)^ 5-4 =(5A + 4)*(5/4)^ 5-4 = minは
最小分間続きますので、図5(a)+ 4 = 4 ^ 5は、= 204を解く、すなわち= 3121分をもたらしました。