///就是用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);
}
}
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);
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货