■問題
カードの束がある.束が崩れないようにカードを一枚ずつずらしていって橋を作る.長さがLのカードを使って長さDの橋を作るためには,何枚のカードが必要か.
■解法
L=1の時,n枚のカードを重ねると,最大の全長は,
Total Length(n) = Σ1≦k≦n1/2k
となるため,Total Length(n)≧Dとなるnを求めれば良い.
- public class BuildBridge{
- public int howManyCards(int d, int l){
- double dd=(double)d/l;
- double tot=0;
- for(int i=1;;i++){
- tot+=0.5/i;
- if(tot+1e-9>dd) return i;
- }
- }
- }
EPS=1e-9としましたが,もう少し小さい(1e-11位)方が安全だと思いました.
0 件のコメント:
コメントを投稿