洛谷 P1163 银行贷款
题目描述
当一个人从银行贷款后,在一段时间内他(她)将不得不每月偿还固定的分期付款。这个问题要求计算出贷款者向银行支付的利率。假设利率按月累计。
输入格式
三个用空格隔开的正整数。
第一个整数表示贷款的原值,第二个整数表示每月支付的分期付款金额,第三个整数表示分期付款还清贷款所需的总月数。
输出格式
一个实数,表示该贷款的月利率(用百分数表示),四舍五入精确到 0.1%。
输入输出样例
输入 #1
1000 100 12
输出 #1
2.9
分析
利率越高,还款时间越长,满足单调性,直接二分利率,如果时间短了说明利率低了,增加利率。反之亦然。check的时候记得判断越还越多的情况。黑心资本家
代码
//还款时间越长利率越高 满足单调性 #include<bits/stdc++.h> using namespace std; double pri,in; int m; bool check(double k) { double np=pri; double nin=in; int ans=0;//记录还款时间 double np_last=1e111;//记录上个月,排除越还越多的情况 while(np>0) { np=np*(1+k)-in; ans++; if(np>=np_last) return false; np_last=np; } if(ans<=m) return true; else return false; } int main() { cin>>pri>>in>>m; double l=0,r=100; while(r-l>1e-10) { double mid=(r+l)/2; if(check(mid)) l=mid;//钱少了,利率小了 else r=mid; } l=l*100; printf("%.1lf",l); return 0; }