银行贷款
题目链接: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掉了,然后就是坐牢推不出公式,快进到题解模式
标签:二分,right,frac,luoguP1163,公式,mid,leq,left From: https://www.cnblogs.com/OVSolitario-io/p/18193426