10年第六届湖南省acm程序设计大赛 第五题 E 内部收益率
題目E
內(nèi)部收益率
?
在金融中,我們有時(shí)會(huì)用內(nèi)部收益率IRR來(lái)評(píng)價(jià)項(xiàng)目的投資財(cái)務(wù)效益,它等于使得投資凈現(xiàn)值NPV等于0的貼現(xiàn)率。換句話說(shuō),給定項(xiàng)目的期數(shù)T、初始現(xiàn)金流CF0和項(xiàng)目各期的現(xiàn)金流CF1, CF2, ...,CFT,IRR是下面方程的解:
?
?
為了簡(jiǎn)單起見(jiàn),本題假定:除了項(xiàng)目啟動(dòng)時(shí)有一筆投入(即初始現(xiàn)金流CF0 < 0)之外,其余各期均能賺錢(即對(duì)于所有i=1,2,...,T,CFi > 0)。根據(jù)定義,IRR可以是負(fù)數(shù),但不能大于-1。
?
?
輸入
輸入文件最多包含25組測(cè)試數(shù)據(jù),每個(gè)數(shù)據(jù)占兩行,第一行包含一個(gè)正整數(shù)T(1<=T<=10),表示項(xiàng)目的期數(shù)。第二行包含T+1個(gè)整數(shù):CF0, CF1, CF2, ..., CFT,其中CF0 < 0, 0 < CFi < 10000 (i=1,2,...,T)。T=0表示輸入結(jié)束,你的程序不應(yīng)當(dāng)處理這一行。
輸出
對(duì)于每組數(shù)據(jù),輸出僅一行,即項(xiàng)目的IRR,四舍五入保留小數(shù)點(diǎn)后兩位。如果IRR不存在,輸出"No",如果有多個(gè)不同IRR滿足條件,輸出"Too many"(均不含引號(hào))
?
| 樣例輸入 | 樣例輸出 |
| 1 -1 2 2 -8 6 9 0 | 1.00 0.50 |
?
如果想直接解出這個(gè)方程 基本上是不可能的
那么我們換種思維? 我們使用窮舉法來(lái)做 但是一個(gè)一個(gè)值窮舉又太不現(xiàn)實(shí)了
介于方程特殊性 我們使用二分查找法能大大縮短窮舉量
#include<stdio.h>
int cf[11];
int T;
double f(double IRR)//求方程式左邊的值函數(shù),sum相當(dāng)于NPV
{
?double a=1,sum=0;
?for(int i=0;i<=T;i++)
?{
??sum+=cf[i]/a;
??a*=IRR;
?}
?return sum;
}
void main()
{
?int i,k=0;
?double m=1e6,n=0,IRR;//m上界 n下界 IRR實(shí)際上等于題目中的IRR+1;
?while(scanf("%d",&T)&&T&&k<=100)//如果不設(shè)置一個(gè)k值無(wú)解情況下很可能程序會(huì)陷入死循環(huán)
?{k++;
??for(i=0;i<=T;i++)
???? scanf("%d",&cf[i]);
???? IRR=m/2;
???? while(f(IRR)!=0)
??{
???if(f(m)*f(IRR)<=0)n=IRR;//如果區(qū)間存在解 必定一個(gè)值大于零一個(gè)值小于零
???if(f(n)*f(IRR)<=0)m=IRR;
???IRR=(m+n)/2;
??}
??? printf("%.2f/n",IRR-1);
?}
}
?
原方法:
#include<stdio.h>
int main() {
? int n;
? int cf[20];
? while(scanf("%d", &n) == 1) {
??? if(!n) break;
??? for(int i = 0; i <= n; i++) scanf("%d", &cf[i]);
??? double l = -1.0, r = 1e6, m;
??? for(int i = 0; i < 100; i++) {
????? m = l + (r-l)/2;
????? double f = 1.0, s = 0;
????? for(int j = 1; j <= n; j++) {
??????? f /= (1+m);
??????? s += cf[j]*f;
????? }
????? if(s < -cf[0]) r = m; else l = m;
??? }
??? printf("%.2lf/n", m);
? }
? return 0;
}
總結(jié)
以上是生活随笔為你收集整理的10年第六届湖南省acm程序设计大赛 第五题 E 内部收益率的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 绘画EQ训练减压一体机--减压训练、绘画
- 下一篇: 全年节日查询