1065:内部収益率

4304 ワード

1065:内部収益率
時間制限:1 Sec
メモリ制限:128 MB
コミット:6
解決:2
[提出][状態][討論版][命題者:
外部インポート]
タイトルの説明
金融では、内部収益率IRRを使用してプロジェクトの投資財務効果を評価することがあります.これは、投資純現在価値NPVを0に等しくする割引率に等しいです.言い換えれば、所与の項目の期間数T、初期キャッシュフローCF 0および項目の各期間のキャッシュフローCF 1,CF 2,…,CFT,IRRは次の式の解である.
 
 
簡単にするために、本題は、プロジェクトの開始時に投入された(すなわち、初期キャッシュフローCF 0<0)を除いて、残りの各期間がお金を稼ぐことができる(すなわち、すべてのi=1,2,...,T,Cfi>0)と仮定する.定義によれば、IRRは負数であってもよいが、−1より大きくてはならない.
 
 
入力
入力ファイルは最大25組のテストデータを含み、各データは2行を占め、第1行は正の整数T(1<=T<=10)を含み、プロジェクトの期間数を表す.2行目はT+1個の整数を含む:CF 0,CF 1,CF 2,...,CFT,そのうちCF 0 Cfi i=1,2,...,T).T=0は入力が終了したことを示し、あなたのプログラムはこの行を処理すべきではありません.
 
しゅつりょく
各データセットについて、出力は1行のみ、すなわち項目のIRRであり、小数点以下の2桁を四捨五入する.IRRが存在しない場合は「No」を出力し、複数の異なるIRRが条件を満たす場合は「Too many」を出力する(いずれも引用符を含まない)
サンプル入力
1-1 22-8 6 90

サンプル出力
1.000.50

ソース
湖南省第6回大学生コンピュータプログラム設計コンテスト
elcome to HNIE onlinejudge
アルゴリズムを運用する.二分法は正確な値を求めます!
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 #include double summ( double irr); int cf[11]; int T; int main() {      int i;      double irr;      double m,n; //m irr ,n IRR ,      while ( scanf ( "%d" ,&T)&&T!=0)      {          m=1e8;          n=-1;          for (i=0;i<=T;i++)              scanf ( "%d" ,&cf[i]);          for (i=0;i<100;i++)          {              irr=(m+n)/2;              if (summ(irr)==0)                  break ; // , , , 。              if (summ(irr)*summ(m)<0)                  n=irr;              else                  m=irr;          }              printf ( "%.2lf
"
,irr);      }      return 0; } double summ( double irr) {      int i;      double sum=0,a=1;      for (i=0;i<=T;i++)      {          sum+=cf[i]/a; //a double ,          a*=irr+1; //irr      }      return sum; }
 
  /**************************************************************      Problem: 1065      User: 201703120136      Language: C      Result:      Time:20 ms      Memory:1092 kb ****************************************************************/