Accept: 16 Submit: 70
Time Limit: 1000 mSec Memory Limit : 32768 KB
Problem Description
daxia想买房,贷款需满足如下要求,在给出总价等各种需要数据的情况下,请帮他计算需要的首付和月供.
1. 采用等额本息还款法:
等额本息还款法:
即把按揭贷款的本金总额与利息总额相加,然后平均分摊到还款期限的每个月中,每个月的还款额是固定的,但每月还款额中的本金比重逐月递增、利息比重逐月递减.
计算公式:
每月还款额=贷款本金×[月利率×(1+月利率)^还款月数]÷[(1+月利率)^还款月数-1]
2. 由于商业贷款利率高于公积金贷款利率,优先公积金贷款,超出部分再采用商业贷款.
3. 银行至多给予贷款总额最多不超过70%,且数额必须为万的整数倍,daxia想尽量少首付多贷款.
Input
测试包含多组数据,每组数据仅一行price_house, max_fund, rate_business, rate_fund, year. 如下详述:
price_house: 100 <= price_house <= 500, 整数, 表示房子总价,单位(万元);
max_fund: 50 <= max_fund <= 100, 整数, 表示公积金最多贷款数额,单位(万元);
rate_business:0 < rate_business < 10, 三位小数的浮点数,表示商业贷款年利率为rate_business%;
rate_fund: 0 < rate_fund < rate_business, 三位小数的浮点数,表示公积金贷款年利率为rate_fund%;
year: 20 <= year <= 30, 整数,表示贷款年限.
Output
每组数据输出一行两个整数first_pay, month_pay.
first_pay: 首付金额,单位(万元)
month_pay: 月供金额,单位(元),请四舍五入.
Sample Input
Sample Output
Hint
样例各个金额如下:
房子总价 225
首付 68
商业贷款 107
公积金贷款 50
商贷月供 6633
公积金月供 2836
Source
FOJ有奖月赛-2016年8月(daxia专场之过四题方有奖)
- 年利率转换为月利率 —— 月利率 = 年利率 / 12 注意:题目中的利率还要加上%所以再除以100
- 注意精度误差(n * 0.7 写为 n * 7 / 10)
- 注意判断公积金是否超过可贷款金额
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
using namespace std;
int a,b,year,ans1,ans2;
double r1,r2;
int main()
{
while(scanf("%d%d%lf%lf%d",&a,&b,&r1,&r2,&year)!=EOF){
ans1 = a - ( a * 7 / 10);
r1 /= 1200; r2 /= 1200;
int month = year * 12;
double b1 = a - ans1 - b,b2 = b;
if(b1<0) b1 = 0,b2 = a - ans1;
b1 = b1 * 10000 * (r1 * pow(1+r1,month)) / (pow(1+r1,month) - 1);
b2 = b2 * 10000 * (r2 * pow(1+r2,month)) / (pow(1+r2,month) - 1);
printf("%d %d\n",ans1,(int)(b1+b2+0.50000001));
}
return 0;
}