[Daimayuan] 高利贷(C++,二分)

19 19 19岁的大学生小 L L L 家里情况不好,每月固定生活费不足以买一部苹果手机。当他得知有贷款机构可以贷小额贷款并且可以分期等额还款,每月只需要还几百块时,在虚荣心的驱使下他开始自己的贷款之旅。

贷款机构声称利率按月累计,贷款人在贷款期间每月偿还固定的分期付款金额。

给出小 L L L 贷款的原值为 n n n,分期付款金额 m m m 和分期付款还清贷款所需的总月数 k k k,求该贷款的月利率 p p p

输入格式

三个用空格隔开的正整数 n n n m m m k k k,含义如上述所示。

输出格式

一个实数 p p p,表示该贷款的月利率(用小数表示),和标准输出绝对值不超过 1 0 − 6 10^{−6} 106即可。

数据范围

1 ≤ n , m ≤ 1 0 6 1≤n,m≤10^6 1n,m106, 1 ≤ k ≤ 300 1≤k≤300 1k300

0 ≤ p ≤ 5 0≤p≤5 0p5,

n ≤ m × k n≤m×k nm×k

输入样例1

1000 1200 1

输出样例1

0.200000

输入样例2

1000 100 12

输出样例2

0.029229

样例解释

对于第一组样例,小 L L L 贷款了 1000 1000 1000 元,并在一个月后支付 1200 1200 1200 元还清了贷款。因此计算月利率 p p p 的公式为 1000 × ( 1 + p ) = 1200 1000×(1+p)=1200 1000×(1+p)=1200 1200 ( 1 + p ) = 1000 \frac{1200}{(1+p)}=1000 (1+p)1200=1000,求出 p = 0.200000 p=0.200000 p=0.200000

对于第二组样例,小 L L L 贷款了 1000 1000 1000 元,并以每月支付 100 100 100 元的方式在 12 12 12 个月后还清了贷款。由于月利率的存在,他第 k k k 个月偿还的金额只相当于 100 ( 1 + p ) k \frac{100}{(1+p)^k} (1+p)k100 元的初始金额,且这 12 12 12个月共偿还初始金额 1000 1000 1000元,求出 p = 0.029229 p=0.029229 p=0.029229

解题思路

首先重新理解一下题意:

我们一共需要还款 n n n元,每个月的还款金额 m m m是固定的,分 k k k个月还清,题目要求月利率 p p p

于是有 n = ∑ i = 1 k m ( 1 + p ) k n=\sum_{i=1}^{k}{\frac{m}{(1+p)^k}} n=i=1k(1+p)km,直观的理解就是虽然我们每月还款金额固定,但所占初始金额的比重越来越小

根据这个计算公式,因为题目给出了 m , k m,k m,k,对于任意的 p p p,我们可以计算出相应 n n n

如果计算出的 n n n值更大,我们应该尝试把 p p p上调;反之,把 p p p下调

可以看出,二分搜索的算法与这一思路完全吻合

接下来实现代码

题目给出了 p p p的搜索区间 [ 0 , 5 ] [0,5] [0,5],停止二分的条件就是精度达到要求,即把答案区间长度收缩到小于 1 0 − 6 10^{-6} 106

double bin_search() {
	double l = 0.0, r = max_p, m;
	while (r - l > 1e-6) {
		m = (l + r) / 2;
		if (judge(m)) l = m;
		else r = m;
	}
	return l;
}

关于judge函数的实现,之前已经说过,这里直接展示代码

bool judge(double p) {
	double down = 1 + p;
	double sum = 0.0;
	for (int i = 0; i < k; i++) {
		sum += m / down;
		down *= 1 + p;
	}
	return sum - n > 0;
}

最后,AC代码如下

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
const int max_n = 1e6;
const int max_m = 1e6;
const int max_k = 300;
const int max_p = 5;

int n, m, k;

bool judge(double p) {
	double down = 1 + p;
	double sum = 0.0;
	for (int i = 0; i < k; i++) {
		sum += m / down;
		down *= 1 + p;
	}
	return sum - n > 0;
}

double bin_search() {
	double l = 0.0, r = max_p, m;
	while (r - l > 1e-6) {
		m = (l + r) / 2;
		if (judge(m)) l = m;
		else r = m;
	}
	return l;
}

int main() {
	cin >> n >> m >> k;
	cout << setiosflags(ios::fixed) << setprecision(6) << bin_search() << endl;
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/9608.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

KD-2125地下电缆测试仪

一、产品概述 管线探测仪是一套高性能地下金属管线探测系统&#xff0c;由信号发射机和接收机组成&#xff0c;可用于金属管线、地下电缆的路径探测、管线普查和深度测量&#xff0c;配合多种选配附件&#xff0c;可以进行唯一性鉴别&#xff0c;以及管道绝缘破损和部分类型电缆…

在Win10安装pytorch3d

Pytorch3d 这是一个为使用Pytorch的3D计算机视觉研究提供的高效可重用的组件 主要特点包括&#xff1a; 用于储存和操作三角形网格的数据结构三角形网格的高效操作&#xff08;投影变换、图形卷积、采样、损失函数&#xff09;可区分的网格渲染器可以通过隐式函数进行新试图…

Object.defineProperty()和 Proxy的区别

众所周知&#xff0c;Object.defineProperty()和 Proxy的区别也是Vue2和Vue3响应式的区别&#xff0c;现在就聊一下为什么Proxy会替代Object.defineProperty() Object.defineProperty()&#xff1a; Object.defineProperty() 方法会直接在一个对象上定义一个新属性&#xff0…

字节8年测试经验,送给想要学习自动化测试的同学6条建议

我的职业生涯开始和大多数测试人一样&#xff0c;开始接触都是纯功能界面测试。那时候在一家电商公司做测试&#xff0c;做了有一段时间&#xff0c;熟悉产品的业务流程以及熟练测试工作流程规范之后&#xff0c;效率提高了&#xff0c;工作比较轻松&#xff0c;也得到了更好的…

MyBatisPlus-DQL编程控制

MyBatisPlus-DQL编程控制3&#xff0c;DQL编程控制3.1 条件查询3.1.1 条件查询的类3.1.2 环境构建3.1.3 构建条件查询3.1.4 多条件构建3.1.5 null判定3.2 查询投影3.2.1 查询指定字段3.2.2 聚合查询3.2.3 分组查询3.3 查询条件3.3.1 等值查询3.3.2 范围查询3.3.3 模糊查询3.3.4…

堆来咯!!!

堆是什么&#xff1f; 是土堆吗&#xff1f; 那当然不是啦~ 堆是一种被看作完全二叉树的数组。 那么什么是完全二叉树呢&#xff1f; 如果二叉树中除去最后一层节点为满二叉树&#xff0c;且最后一层的结点依次从左到右分布&#xff0c;则此二叉树被称为完全二叉树。 堆的特…

中国版的ChatGPT,你最看好谁?

一、百度&#xff1a;文心一言升级中&#xff0c;未来支持开源 3月16日&#xff0c;百度正式推出国内首款生成式AI产品“文心一言”&#xff0c;可支持文学创作、文案创作、数理推算、多模态生成等功能。 “文心一言”基于全栈自研的AI基础设施进行学习和训练&#xff1a; ①…

selenium自动化测试面试题【含答案】

目录 1、selenium中如何判断元素是否存在&#xff1f; 2、selenium中hidden或者是display &#xff1d; none的元素是否可以定位到&#xff1f; 3、selenium中如何保证操作元素的成功率&#xff1f;也就是说如何保证我点击的元素一定是可以点击的&#xff1f; 4、如何提高s…

redis持久化方式区别

Redis是一种高级key-value数据库。它跟memcached类似&#xff0c;不过数据可以持久化&#xff0c;而且支持的数据类型很丰富。有字符串&#xff0c;链表&#xff0c;集 合和有序集合。支持在服务器端计算集合的并&#xff0c;交和补集(difference)等&#xff0c;还支持多种排序…

springboot实现修改用户信息功能

目录 1、UserEntity层 2、UserMapper层 3、UserService层 4、UserController类 5、Postman测试 要实现修改用户信息的功能&#xff0c;需要编写对应的代码&#xff1a; 如&#xff1a; 在UserEntity中定义用户实体类的属性。 在UserMapper中编写修改用户的SQL语句&#…

极光笔记 | 如何在Shopify中使用EngageLab (下)

Sendgird发布的《2022 Global Messaging Engagement Report》中揭示了世界各地的用户更喜欢用哪种方式与品牌互动&#xff0c;结论是&#xff1a;“电子邮件仍然是第一名&#xff08;短信紧随其后&#xff09;”。4800多名受访者中&#xff0c;有18%的人将电子邮件列为他们最常…

批处理文件名(不含空格的文件名、以及含空格的文件名)

目的&#xff1a; 整理为&#xff1a; 步骤&#xff1a; 结果生成1.txt内容为&#xff1a; 新建excel 复制1.txt中待处理的文件名字 然后 一直点下一步直到完成&#xff0c;再删除多余列&#xff0c;只剩下名字列 设置P1单元格为1.jpg,下拉递增 设置P1单元格 “REN “&…

Html5代码实现动态时钟

以下是一个简单的HTML5动态时钟的示例&#xff1a; <!DOCTYPE html> <html> <head><title>HTML5动态时钟</title><style>body {margin: 0;padding: 0;background-color: #000;color: #fff;font-size: 5em;font-family: Arial, sans-serif…

1、Windows下编译并搭建AzerothCore服务端

目录前言一、AzerothCore下载二、mysql安装三、boost安装四、OpenSSL安装五、CMake下载六、CMake编译1 - CMake生成vs项目2 - vs项目设置3 - 生成解决方案4 - 安装AzerothCore5 - 添加账号6 - 修改服务器名称7 - 修改客户端的服务器地址前言 客户端对应版本&#xff1a;魔兽世…

STM32 PWM模式与输出比较模式的区别。PWM占空比不生效,在STM32CubeMX中配置PWM的两种模式——蓝桥杯嵌入式

&#x1f38a;【蓝桥杯嵌入式】专题正在持续更新中&#xff0c;原理图解析✨&#xff0c;各模块分析✨以及历年真题讲解✨都已更新完毕&#xff0c;欢迎大家前往订阅本专题&#x1f38f; &#x1f38f;【蓝桥杯嵌入式】蓝桥杯第十届省赛真题 &#x1f38f;【蓝桥杯嵌入式】蓝桥…

chatgpt入口-chatgpt哪里下载

如何开通ChatGPT权限 开通 ChatGPT 的权限与具体的服务提供商有关&#xff0c;不同的服务提供商可能有不同的服务要求和使用条件。下面是一些可以开通 ChatGPT 权限的一般步骤&#xff1a; 寻找服务提供商&#xff1a;首先需要寻找一个可供使用的 ChatGPT 服务提供商。您可以在…

Html5版贪吃蛇游戏制作(经典玩法)

回味经典小游戏&#xff0c;用Html5做了个贪吃蛇的小游戏&#xff0c;完成了核心经典玩法的功能。 游戏可以通过电脑的键盘“方向键”控制&#xff0c;也可以点击屏幕中的按钮进行控制。&#xff08;支持移动端哈&#xff09; 点击这里试玩 蛇的移动是在18 x 18的格子中进行移…

(函数指针) 指向函数的指针

函数指针- 指向函数的指针函数指针的声明和使用通过函数指针调用函数函数指针做参数函数指针数组函数指针的声明和使用 函数指针的声明格式&#xff1a; 返回值类型 (*函数指针名)(参数列表); 其中&#xff1a; *函数指针名 表示函数指针的名称返回值类型 则表示该指针所指向…

swf怎么转换成mp4格式,5个方法都很简单

swf怎么转换成mp4格式&#xff1f;各位小伙伴们有没有遇到过想要打开swf文件却需要安装flash插件的情况呢&#xff1f;其实&#xff0c;swf文件是flash软件或者animate软件导出的flash软件的专属格式&#xff0c;主要应用于动画设计领域,在网页html设计中非常常见&#xff0c;但…

(数字图像处理MATLAB+Python)第四章图像正交变换-第二节:离散余弦变换和K-L变换

文章目录一&#xff1a;离散余弦变换&#xff08;Discrete Cosine Transform&#xff0c;DCT&#xff09;&#xff08;1&#xff09;一维DCTA&#xff1a;定义B&#xff1a;实例&#xff08;2&#xff09;二维DCTA&#xff1a;定义B&#xff1a;实例C&#xff1a;程序&#xff…
最新文章