陈阿水


私信TA

用户名:cas52012

访问量:12042

签 名:

MADAO

等  级
排  名 1815
经  验 2620
参赛次数 0
文章发表 10
年  龄 27
在职情况 待业
学  校 海南大学
专  业

  自我简介:

今天的动漫还没看!

解题思路:

就老老实实照着上面写的公式算。试出来的。-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分

1 人评分

  评论区

  • «
  • »