首页 > 其他分享 >P1163 银行贷款(小数二分)

P1163 银行贷款(小数二分)

时间:2023-03-22 22:44:07浏览次数:53  
标签:二分 借款 frac 金额 mid 还款 P1163 月利率 小数

变量命名如下:
\(n\) 表示贷款的原值,
\(m\) 表示每月支付的分期付款金额,
\(k\) 表示分期付款还清贷款所需的总月数。
\(p\) 表示贷款的月利率

第 \(1\) 月利率为 \((1+p)\),其还款金额 \(m\) 相当于借款金额 \(\frac{m}{1+p}\)

第 \(2\) 月利率为 \((1+p)^2\),其还款金额 \(m\) 相当于借款金额 \(\frac{m}{(1+p)^2}\)

第 \(3\) 月利率为 \((1+p)^3\),其还款金额 \(m\) 相当于借款金额 \(\frac{m}{(1+p)^3}\)

....

第 \(k\) 月利率为 \((1+p)^k\),其还款金额 \(m\) 相当于借款金额 \(\frac{m}{(1+p)^k}\)

其总共还款金额 \(k*m\) 相当于借款金额 \(s = \sum_{i=1}^{k} \frac{m}{(1+p)^i}\)。

于是有公式, \(s = \sum_{i=1}^{k} \frac{m}{(1+p)^i}=n\)。

所以问题转化为找一个合法的 \(p\),使其满足上述公式。

假定 \(p\) 的可取范围为 \([0,10]\),小数二分该区间即可。

如果 \(s≤n\),则证明 \(p\) 需要降低 --- 即取左区间 \(r=mid\)。

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const double eps=1e-4;
double n,m,k;

// 检查利率为 x 时,还款是否 <=n.
bool chk(double x){
    double s=0, p=1;
    for(int i=1; i<=k; i++){
        p *= (1+x);
        s += m/p;
    }
    return s<=n;
}
int main() {
    scanf("%lf%lf%lf",&n,&m,&k);
    double l=0,r=10;
    while(r-l > eps){
        double mid=(l+r)/2;
        if(chk(mid)) r=mid;
        else l=mid;
    }
    printf("%.1lf",l*100);
    return 0;
}

标签:二分,借款,frac,金额,mid,还款,P1163,月利率,小数
From: https://www.cnblogs.com/hellohebin/p/17245774.html

相关文章

  • vue中设置input输入框的值为正整数,不能为负数和小数
    importVuefrom'vue'Vue.directive('Int',{bind:function(el){constinput=el.getElementsByTagName('input')[0]input.onkeyup=function(e){......
  • 二分
    二分算法(一个简单且非常实用的算法)算法思想,通过中间值不断缩短检索区域-->大大降低T的可能性-->只要是检索的题目都可以用二分查找来解决算法思路:1.确定左右边界2.......
  • 704.二分查找——学习笔记
    题目:给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。示例1输入:nums=[-1,0,3......
  • Leetcode 4. 寻找两个正序数组的中位数(二分)
    题目链接在这里:是一道很好的二分题,一开始没有想到越界怎么处理,忽略了(m+n)/2一定介于min(n,m)和max(n,m)之间,因此如果确定在短的数组上进行二分就不用考虑越界问题了,其次......
  • [pat乙]1023. 组个最小数
    1023.组个最小数(20)给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)。例如:给定两个0,两个1,三个......
  • python实现一个二分法
    #################      ############################### ......
  • 二分查找模板
    /** *递归 * *@parama *@paraml *@paramr *@return */ staticintbinarySearch(int[]a,intl,intr){ if(l>r){//这里为什么不加等号......
  • 二分法:区间的重要性(初探)
    哈喽,我是404,正在努力提升代码能力的未来女程序员(笑),这是我的第一篇博客,接下来会记录我的学习之路到我力扣完全可以手撕,废话不多说,正文开搞!通过初见力扣经典题目704.二......
  • java进阶 二分查找 46
        packagecom.cyjt97.bubbling;publicclassmid{publicstaticvoidmain(String[]args){intarr[]={11,22,33,44,55,66,77,88......
  • 突刺贯穿的第二分块
    [CF896E]Welcomehome,Chtholly给定一个长为\(n\)的序列\(a_1\sima_n\),\(m\)次操作,分两种:1lrx,将\(a_l\sima_r\)中\(\gtx\)的数减去\(x\)。2lr......