首页 > 其他 > 详细

洛谷P1163银行贷款(经典二分答案入门题)

时间:2018-11-28 19:57:41      阅读:297      评论:0      收藏:0      [点我收藏+]

题目链接:

 

跟最大值最小化(最小值最大化)略有不同,枚举利率满足=0刚好还完即可(坑点,浮点数有精度误差,控制好),但大致上一样。(其实我是先写暴力枚举再改为二分枚举的。。)

 

注意几点

1.经济学常识,利率累加每月的额外支付不一样(明白那个计算公式相当于judge函数)。

2.找到一个满足的就可以退出,不用再像最小值最大化再向右尝试了。

3.控制好精度问题,<0.001有个wa,<0.0001即可

4.和那个问题不同,可能过程中没有break直到最后退出,这时特判一下=r或l即可

 

 1 #include <iostream>
 2 #include <iomanip>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     ios::sync_with_stdio(false); cin.tie(0);
 8     
 9     double a,b,c;
10     cin>>a>>b>>c;
11     
12     double i=0,ans=0;
13     double l=0,r=5;
14     while(l<=r)
15     {
16         double mid=(l+r)/2;
17         //cout<<l<<‘ ‘<<r<<‘ ‘<<mid<<endl;
18         double x=a;
19         for(int j=1;j<=c;j++)
20             x=x*(1+mid)-b;
21         
22         if(x>=-0.0001 && x<=0.0001)
23         {
24             ans=mid;
25             break;
26         } 
27         else
28         {
29             if(x>0) r=mid-0.0001;
30             else l=mid+0.0001;
31         }
32              
33     }
34     if(l>r) ans=l;
35     
36     cout<<setiosflags(ios::fixed)<<setprecision(1)<<ans*100<<endl;
37     
38     return 0;
39     
40 }

 

完。

洛谷P1163银行贷款(经典二分答案入门题)

原文:https://www.cnblogs.com/redblackk/p/10034181.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!