题意:
+ + ... + = CF0
分析:这题有点坑,输出还说,如果不存在根输出NO,多个根输出“many Too many”通过限制条件分析,方程有且仅有一个实根,CF0>0,0<CFi<=10000 均为整数,而且结果精确到小数点后两位,看下图:
发现因为CF0为正整数,故CF0最小为1,可知IRR最大为10^4。
二分求方程根即可!
int a[12]={0},n;
double cal(double IRR)
{
double sum=a[n];
for(int i=n;i>0;i--)
sum=sum/(1.0+IRR)+a[i-1];
return sum;
}
int main()
{
double cf0;
while(~scanf("%d",&n)&&n)
{
scanf("%lf",&cf0);
cf0=-cf0;
for(int i=1;i<=n;i++)scanf("%d",a+i);
double l=-1.0,r=10e4,mid;
for(int i=0;i<40;i++)
{
mid=(l+r)/2.0;
if(cal(mid)<cf0)r=mid;
else l=mid;
//if(r-l<eps)break;
}
printf("%.2f\n",mid);
}
return 0;
}