///就是用Math.Pow---求x的y次方和Factor函数(自定义)--求阶乘try:using System;class Pdl{
  private int c;
  private int k;
  private double rou;
  private double lamda;
  public Pdl(int c,int k,double r,double l){
    this.c = c;
    this.k = k;
    this.rou = r;
    this.lamda = l;
  }
  private double P(int k){
    if(k == 0){
     double sum = 0.0;
     for(int i = 1; i < c; i++)
       sum += Math.Pow(c * rou,i)/Factor(i);
      if(rou != 1)
       sum += Math.Pow(c,c) * (Math.Pow(rou,c) - Math.Pow(rou,this.k + 1))/(Factor(c) * (1 - rou));
      else
        sum += Math.Pow(c * rou,c) * (this.k - c + 1)/(Factor(c));
      return sum;
    }
    else//k!=0
      if(k>=1 && k<c)
       return Math.Pow(c * rou,k)/Factor(k) * P(0);//Call P(0)
      else if(k>=c && k<this.k)
         return Math.Pow(c,c) * Math.Pow(rou,k) * P(0) / Factor(c);
      else//k<0
        return 0.0;
  }
  
  private double Factor(int i){
    if(i < 0)
       return 0.0;
    double result = 1.0;
    for(int j = 1; j <= i; j++)
       result *= j;
    return result;
  }
  
  public double Lq{
    get{
      double lq = 0.0;
      for(int n = 0; n < k; n++)
        lq += (n - c) * P(n);
      return lq;
    }
  }
  public double L{
    get{
      return Lq + rou * (1 - P(k));
    }
  }
  public double W{
    get{
      return L/(this.lamda * (1 - P(k)));
    }
  }
  public double Wq{
    get{
      return Lq/(this.lamda * (1 - P(k)));
    }
  }
}class Test{
  static void Main(){
    Pdl pdl = new Pdl(1,2,2.0,2.5);
    Console.WriteLine(pdl.Lq + " " + pdl.L + " " + pdl.W + " " + pdl.Wq);
  }
}