【洛谷】P1163 银行贷款

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

目录

1. 题目描述

2. 思路分析

3. 代码实现


1. 题目描述

【洛谷】P1163 银行贷款_第1张图片

2. 思路分析

这题需要注意的是利率按月累计这句话,也就是相当于“利滚利”。

我们定义sum变量表示贷款原值,money表示每月支付的分期付款金额,month表示还清贷款需要的月数。

写一个自定义函数check()用来判断遍历时的利率题目实际利率的大小关系,将利率区间设为[0,10],即l=0r=10(r也可以更大)。然后进行浮点数二分,

如果check()函数返回值大于0,说明利率过大,则从左侧继续二分查找(r=mid);

如果check()函数返回值小于0,说明利率过小,则从右侧继续二分查找(l=mid);

如果check()函数返回值等于零,则输出结束程序。

浮点数二分模板在这https://blog.csdn.net/m0_62531913/article/details/132391682?spm=1001.2014.3001.5501

又因为答案要四舍五入精确到0.1%,所以我们最后输出l*100即可

3. 代码实现

#include
using namespace std;
int sum, money, month;
bool check(double x)
{
	double s = sum;
	for (int i = 0; i < month; i++)
	{
		s = s * (1 + x) - money;
	}
	if (s > 0) return true;
	else return false;
}

int main()
{
	cin >> sum >> money >> month;
	double l = 0, r = 10;
	while (r - l > 1e-4)
	{
		double mid = (l + r) / 2;
		if (check(mid)) r = mid;
		else l = mid;
	}
	printf("%.1lf\n", l * 100);
	return 0;
}

【洛谷】P1163 银行贷款_第2张图片

你可能感兴趣的:(编程刷题,#,洛谷,算法,二分,数学,洛谷)