读书人

一道概率的题目看看小弟我写的程序哪

发布时间: 2013-08-04 18:26:15 作者: rapoo

一道概率的题目,看看我写的程序哪里有问题
题目:

一个人,任意一天,他都有60%的概率出去喝酒,他只到A,B,C三家酒吧喝酒。
一天,警察在A酒吧和B酒吧都没有找到他,那么警察能在C酒吧找到他的概率是多少。

问:

此题是否可解,如何可解,以编程运算验证此概率;
如果不可解,以程序运算验证此题不可解,并给出令此题可解的最简附加条件,并以编程运算验证概率结果。

猿们需要阐述程序设计的逻辑。对程序架构没有要求,只要求可以输入/输出能够反映关键问题的值即可。

我编写的测试代码:


class Program
{
static void Main(string[] args)
{
int testTimes;
Console.WriteLine("输入警察一共找了他多少次?");
try
{
testTimes = int.Parse(Console.ReadLine());
}
catch
{
Console.WriteLine("输入的不是整数");
return;
}
int findTimesInA = 0;
int findTimesInB = 0;
int findTimesInC = 0;
for (int i = 0; i < testTimes; i++)
{
YeShen yeshen = new YeShen();
if (yeshen.isDrink)//如果喝酒了
{
if (yeshen.pub == Pub.A)
{
findTimesInA++;


}
else if (yeshen.pub == Pub.B)
{
findTimesInB++;
}
else if (yeshen.pub == Pub.C)
findTimesInC++;
}
}


int yangben = testTimes - (findTimesInA + findTimesInB);
double result = (double)findTimesInC / (testTimes - (findTimesInA + findTimesInB));

Console.WriteLine("一共测试:" + testTimes.ToString() + "次,");
Console.WriteLine("在酒店A被逮到" + findTimesInA.ToString() + "次");
Console.WriteLine("在酒店B被逮到" + findTimesInB.ToString() + "次");
Console.WriteLine("在酒店C被逮到" + findTimesInC.ToString() + "次");
Console.WriteLine("概率样本:" + yangben.ToString() + "次");
Console.WriteLine("最终概率" +findTimesInC +"/"+yangben +"="+ result.ToString("0.0000"));

Main(new string[10]);
}



class YeShen //醉汉实体类
{
public bool isDrink;
public Pub pub;



public YeShen()
{
Random random = new Random();
int i = random.Next(100);
if (i < 60)
{
isDrink = true;//小于60,出去喝酒了
int j = random.Next(3);//假设三家概率一样
pub = (Pub)j;//随机在三家的一家喝酒
}
else
{
isDrink = false;
}
}
}

enum Pub
{ //枚举三家酒吧
A = 0, B = 1, C = 2
}
}



我用写的代码进行测试。主要就是生成随机数,但是我输入测试1w次之后,测试几次输出的结果的差异竟然差距很大。不知道是什么原因。 测试
[解决办法]
这题我是觉得不可解,因为去A,B,C三家喝酒的概率没有给。
1/3 : 1/3 : 1/3

1/100 : 1/100 : 98/100


得出的结果是不一样的。

[解决办法]
如果针对你的代码来说,首先把
Random random = new Random();
放到类里。
private static Random random = new Random();

[解决办法]
Random random = new Random();没参数默认是用时间当种子,你程序运行的很快,这样就造成了种子相同的会比较多。剩下的你也懂得,种子相同,算法相同,取出来的结果就相同,这样不能算随机数了,结果都集中在一起了。

读书人网 >C#

热点推荐