题目链接:
跟最大值最小化(最小值最大化)略有不同,枚举利率满足=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 }
完。
原文:https://www.cnblogs.com/redblackk/p/10034181.html