本文主要是介绍P1163 银行贷款,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
P1163 银行贷款
P1163 银行贷款
题意
1.从银行贷款后,在一段时间内每月偿还固定的分期付款。这个问题要求计算出贷款者向银行支付的利率。假设利率按月累计。
2.三个用空格隔开的正整数。第一个整数表示贷款的原值n,第二个整数表示每月支付的分期付款金额 m,第三个整数表示分期付款还清贷款所需的总月数t。
思路
- 先判断题目用什么知识点,例:这题二分。
- 理解题意,将实例演示出来。
- 注意细节,将实例带到所写的代码中看看能不能实现。
坑点
- 数据保证答案不超过300.0%,给l,r定义范围。
- 钱多钱少与在二分中间值的左边还是右边要搞搞清楚。
- ans>0,还有钱没还清,利润小了,往右边找。ans<0,多还钱了,利润大了所有往左找。
算法一:浮点二分
时间复杂度
输出大小: 1.90697479248047 MiB
编译时间: 1.14s
实现步骤
- 首先定义函数,函数里面用二分(模版)解答,n贷款,m分期付款,t月数
- 根据题目,在理解题目意思的前提下,用二分法将题意表达出来。
- 最后在主函数中应用所定义的函数。
代码
#include <iostream>
#include <cstdio>
using namespace std;
double n,m,t;//n贷款,m分期付款,t月数
//double h;
double find(double l,double r){double mid=(l+r)/2;//表示一开始的利润 double ans=n;//ans为剩下的钱 for(int i=1;i<=t;i++){ans=ans*(1+mid)-m;}if(ans==0||r-l<0.000001){//保证精准度足够 return mid;}if(ans>0){//还有钱没还清,利润小了 ,往右边找 return find(l,mid); //相当于r=mid}if(ans<0){//多还钱了,利润大了所有往左找 return find(mid,r);//相当于l=mid }
}
int main(){
// cin>>n>>m>>t;scanf("%lf%lf%lf",&n,&m,&t);double h=find(0,5);//数据保证答案不超过300.0%//给l,r定义范围printf("%.1lf",h*100);return 0;
}
总结
浮点二分和二分一样,都要先定义一个函数,再在主函数里运用函数,说白了,唯一不同的就是,数值是一个是浮点型,一个是整型
这篇关于P1163 银行贷款的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!