OVSolitario-io

导航

luoguP1163-二分

银行贷款

题目链接:https://www.luogu.com.cn/problem/P1163

本题思路:

orz公式

数学公式给出n,m,k,求贷款者向银行支付的利率
p,使得: $ \sum_{i = 1}^{k
}m * [\frac{1}{1 + p}]^{i} $,通过化简(根据等比数列的求和公式)我们有: $ m\frac{1-\left(\frac{1}{1+p}\right)^k}{1-\frac{1}{1+p}} = n $

数学公式: $ \sum_{i=1}^{k} ar^{i-1} = a\frac{1-r^k}{1-r} $
对于第一个公式有:
$ \sum_{i=1}^{k} m \left(\frac{1}{1+p}\right)^i = n $
将公式转换为等比数列的形式:设a = m 、r = $ \frac{1}{1+p} $, k是求和的项数。
这样,我们的等比数列就可以表示为: $ (m, m\frac{1}{1+p}, m\left(\frac{1}{1+p}\right)^2, \ldots, m\left(\frac{1}{1+p}\right)^{k-1} ) $

然后,对等比数列求和公式的右侧进行化简: $ m\frac{1-\left(\frac{1}{1+p}\right)^k}{\frac{p}{1+p}} = n $

$ m\frac{1-\left(\frac{1}{1+p}\right)^k}{p} = n $

进一步简化:
数学公式: $ \left(\frac{1}{1+p}\right)^k = 1 - \frac{n}{m}p $

本题思路:

题目描述

当一个人从银行贷款后,在一段时间内他(她)将不得不每月偿还固定的分期付款。这个问题要求计算出贷款者向银行支付的利率。假设利率按月累计。

输入格式

三个用空格隔开的正整数。

第一个整数表示贷款的原值 \(w_0\),第二个整数表示每月支付的分期付款金额 \(w\),第三个整数表示分期付款还清贷款所需的总月数 \(m\)

输出格式

一个实数,表示该贷款的月利率(用百分数表示),四舍五入精确到 \(0.1\%\)

数据保证答案不超过 \(300.0\%\)

样例 #1

样例输入 #1

1000 100 12

样例输出 #1

2.9

提示

数据保证,\(1 \leq w_0, w\leq 2^{31}-1\)\(1 \leq m\leq 3000\)

ACcode:

#include <iostream>
#include <cmath>

using namespace std;

double n, m, k, l = 0, r = 10;//注意考虑n,m,k在公式关系可能为double

bool bs(double mid) {//代入orz公式计算
    return pow(1.0 / (1.0 + mid), k) >= 1.0 - n / m * mid; 
}

int main()
{
    cin >> n >> m >> k;

    while(r - l >= 0.0001) {
        double mid = (l + r) / 2;
        if(bs(mid)) r = mid;
        else l = mid;
    }
    printf("%.1lf", l * 100);
    return 0;
}

·························································

当时思路:

再一次二分答案卡住坐牢,(应该是看到了)但没有理解利率按月累计(又好像影响不大)...脑子wa掉了,然后就是坐牢推不出公式,快进到题解模式

posted on 2024-05-15 15:44  TBeauty  阅读(12)  评论(0)    收藏  举报