解题思路:
就老老实实照着上面写的公式算。试出来的。-1到正无穷。
注意事项:
double,最好不要用=号,用约等于就行。
参考代码:
#include<stdio.h>
#include<math.h>
int main()
{
double irr,npv,num,max,mix;
double temp[25];
int i,t,t0,j,k;
int cf[10];
for(i=0;i<25;i++)
{
scanf("%d",&t);
if(t==0)
{
temp[i]=-3;
break;
}
scanf("%d",&t0);
for(j=0;j<t;j++)
{
scanf("%d",&cf[j]);
}
irr=1e10;
max=irr;
mix=-1;
num=0;
k=0;
temp[i]=-2;
while(num<=1&&k<100&&temp[i]!=irr)
{
npv=0;
for(j=0;j<t;j++)
{
npv=npv+(1.0*cf[j])/pow(irr+1,j+1.);
}
npv=npv+t0;
if(fabs(npv)<1e-5)
{
num++;
temp[i]=irr;
irr=max*20;
mix=max;
max=irr;
k=0;
continue;
}
if(npv>0)
{
mix=irr;
if(irr==max)
{
irr=irr*2;
max=irr;
}
else
{
irr=(max+mix)/2;
}
}
else if(npv<0)
{
max=irr;
irr=(max+mix)/2;
}
k++;
}
if(k==100&&temp[i]==-2)
temp[i]=-2;
else if(num>1)
temp[i]=-4;
}
for(i=0;i<25;i++)
{
if(temp[i]==-3)
{
break;
}
if(temp[i]==-2)
{
printf("No");
}
else if(temp[i]==-4)
{
printf("Too many");
}
else
printf("%.2lf\n",temp[i]);
}
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复