zoukankan      html  css  js  c++  java
  • 洛谷P1163银行贷款(经典二分答案入门题)

    题目链接:

    跟最大值最小化(最小值最大化)略有不同,枚举利率满足=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=r;35     
    36     cout<<setiosflags(ios::fixed)<<setprecision(1)<<ans*100<<endl;
    37     
    38     return 0;
    39     
    40 }

    与之相似的还有小车问题

    该题2种解法:

    1.数学列解方程(有些不太好想方程不太好列,不推荐)

     1 #include <iostream>
     2 #include <string>
     3 #include <algorithm>
     4 #include <iomanip>
     5 using namespace std;
     6 
     7 int main()
     8 {
     9     double s,a,b;
    10     cin>>s>>a>>b;
    11     
    12     double x=(a+b)*s/(3*a+b);
    13     double t=x/b+(s-x)/a;
    14     
    15     cout<<setiosflags(ios::fixed)<<setprecision(6)<<t<<endl;
    16     
    17     return 0;
    18 }

    2.枚举答案二分(无脑枚举x点位置再控制精度即可,推荐简单)(比较锻炼代码能力和思维能力==要的就是这种分析解决问题的能力)

     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 s,a,b;
    10     cin>>s>>a>>b;
    11     
    12     double ans=0;
    13     double l=0,r=s;
    14     while(l<=r)
    15     {
    16         double mid=(l+r)/2;
    17         //cout<<l<<' '<<r<<' '<<mid<<endl;
    18         double t2=mid/b+(s-mid)/a;
    19         double t1=mid/b+(mid-a*mid/b)/(a+b)+(s-a*mid/b-a*(mid-a*mid/b)/(a+b))/b;
    20         double t=t2-t1;
    21         //cout<<t2<<' '<<t1<<endl;
    22         
    23         if(t>=-0.000001 && t<=0.000001)
    24         {
    25             ans=mid;
    26             break;
    27         } 
    28         else
    29         {
    30             if(t<-0.000001) r=mid-0.000001;
    31             else if(t>0.000001) l=mid+0.000001;
    32         }
    33              
    34     }
    35     //if(l>r) ans=r;
    36     
    37     //cout<<setiosflags(ios::fixed)<<setprecision(6)<<ans<<endl;
    38     double p=ans/b+(s-ans)/a;
    39     cout<<setiosflags(ios::fixed)<<setprecision(6)<<p<<endl;
    40     
    41     
    42     return 0;
    43 }

    完。

  • 相关阅读:
    CrawlSpider
    如何提升scrapy爬取数据的效率
    scrapy中的selenium
    scrapy五大核心组件和中间件以及UA池和代理池
    scrapy处理post请求的传参和日志等级
    移动端数据爬取
    python网络爬虫之图片链家在技术.seleninum和PhantonJS
    [典型漏洞分享]从一个手动分析的反射型XSS漏洞看待一个安全设计原则【中危】
    [典型漏洞分享]YS VTM模块存在格式化字符串漏洞,可导致VTM进程异常退出【高危】
    Android Logcat Security(转)
  • 原文地址:https://www.cnblogs.com/redblackk/p/10034181.html
Copyright © 2011-2022 走看看