問題
http://community.topcoder.com/stat?c=problem_statement&pm=3970&rd=7993
・車をローンで購入する。
・車の費用はあらかじめわかっており、ディーラーは月額の固定支払額と払い終わるまでの月数を教えてくれる。
・ただしその場合のローン率は教えてくれない。
・支払いは毎月残額にたいしてローン率/12が足された後、毎月の固定支払額が引かれる計算となる。
・このとき、ローン率がいくらになるか求める。
解き方
2分探索で簡単に解くことができる。
相対誤差で計算してもよいが、100回まわせば誤差1e-9に対して精度は10^2/10^100なので十分。
コード
class AutoLoan {
public: double interestRate(double price, double monthlyPayment, int loanTerm) {
double low=0.0,high=100.0;
FORE(i,0,100){
double mid=(high+low)/2.0;
double cost=price;
FORE(j,0,loanTerm){
cost+=cost*mid/12.0;
cost-=monthlyPayment;
}
if(cost<=0)low=mid;
else high=mid;
}
return low*100.0;
}
};
public: double interestRate(double price, double monthlyPayment, int loanTerm) {
double low=0.0,high=100.0;
FORE(i,0,100){
double mid=(high+low)/2.0;
double cost=price;
FORE(j,0,loanTerm){
cost+=cost*mid/12.0;
cost-=monthlyPayment;
}
if(cost<=0)low=mid;
else high=mid;
}
return low*100.0;
}
};