华师一附中OI组
标题:
P1163 银行贷款
[打印本页]
作者:
admin
时间:
2018-4-14 21:08
标题:
P1163 银行贷款
当一个人从银行贷款后,在一段时间内他(她)将不得不每月偿还固定的分期付款。这个问题要求计算出贷款者向银行支付的利率。假设利率按月累计。输入文件仅一行包含三个用空格隔开的正整数。第一个整数表示贷款的原值,第二个整数表示每月支付的分期付款金额,第三个整数表示分期付款还清贷款所需的总月数。输出一个实数,表示该贷款的月利率(用百分数表示),四舍五入精确到0.1%。
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
const long double eps=0.00001;
int s,a,month;
long double f(long double x)
{
long double sum=s,xx=x;
for (int i=1; i<=month; i++)
{
sum=sum*(1+x);
sum-=a;
///cout<<sum<<' ';
}
return sum;
}
int main()
{
cin>>s>>a>>month;
long double sum=a*month;
long double l=0,r=100,m;
bool b=1;
while (l<=r && b)
{
m=(l+r)/2;
///cout<<l<<' '<<r<<' '<<m<<' '<<f(m)<<' '<<sum<<endl;
if (abs(l-r)<eps) b=0;
else if (f(m)>0) r=m-eps;
else if (f(m)<0) l=m+eps;
else if (abs(sum-f(m))<eps) b=0;
}
m=m*100;
cout<<fixed<<setprecision(1)<<m;
}
复制代码
作者:
张笑宇
时间:
2018-4-19 10:36
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
double sum,s,n;///sum总金额 s每月金额 n月数
double eps=0.0001;
double l=0,m,r=100;///百分数
bool b=true;
long double answer(long double x)
{
long double ss=sum,xx=x;
for (int i=1; i<=n; i++)
{
ss=ss*(1+x);
ss-=s;
///cout<<sum<<' ';
}
return ss;
}
int main()
{
cin>>sum>>s>>n;
long double ss=s*n;
while (l<r && b)
{
m=(l+r)/2;
if (abs(l-r)<eps) b=false;
else if (answer(m)<0) l=m+eps;
else if (answer(m)>0) r=m-eps;
else if (abs(answer(m)-sum)<eps) b=false;
}
cout<<fixed<<setprecision(1)<<m*100;
return 0;
}
作者:
倚窗倾听风吹雨
时间:
2018-7-10 18:25
#include<iostream>
#include<iomanip>
using namespace std;
int i,m,x,y;
double ans;
void ef(double l,double r)
{
double k=(l+r)/2;
double u=r-l;
double a=m;
for(i=1;i<=y;i++)
a=a*(1.0+k)-x;
if(a==0 || u<0.0001)
{
k=k*100;
cout<<fixed<<setprecision(1)<<k;
return;
}
if(a>0) ef(l,k);
else ef(k,r);
}
int main()
{
cin>>m>>x>>y;
ef(0,100);///这道题数据特坑爹,有一个利率200%多,现实中怎么可能。。。。为了保险从0和10000%开始二分
}
复制代码
作者:
黄煦喆
时间:
2018-8-25 16:25
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int n,a,b,k=1;
typedef double db;
db x,l,r,m,ans;
db eps=0.0001;
db f(db x)
{
db s=a;
for(int i=1; i<=n; i++)
{
s*=1+x;
s-=b;
}
return s;
}
void ms(db l,db r)
{
while(l<r)
{
m=(l+r)/2;
if(f(m)==0||abs(l-r)<=eps){ans=m;return;}
else if(f(m)<0)l=m;
else r=m;
}
}
int main()
{
cin>>a>>b>>n;
r=5.0;
ms(l,r);
cout<<fixed<<setprecision(1)<<ans*100;
return 0;
}
复制代码
欢迎光临 华师一附中OI组 (http://hsyit.cn/)
Powered by Discuz! X3.2