有这样一个问题,谁能用程序来描述下 一个老虎在一天中午吃饭,每个肉3斤左右,一天也就能吃30斤肉左右,但这有2个饲养员 饲养员A的情况是:1块肉有30%的概率会多加了3斤.饲养员B的情况是:1块肉有25%的概率也会多加3了斤,有5%的概率呢会多给一块肉(而且这块肉呢还可能是多加了3斤的肉) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个题目满有意思,我来试试: int sumA = 0; for(int ix = 0; ix < 10; ++ix) { double r = Math.random(); if(r < 0.3) { sumA += 6; } else { sumA +=3; } } System.out.println(sumA); int sumB = 0; boolean oneMore = false; for(int ix = 0; ix < 10; ++ix) { double r = Math.random(); if(r < 0.05 && !oneMore) { oneMore = true; --ix; r = Math.random(); } if(r < 0.25) { sumB += 6; } else { sumB += 3; } } System.out.println(sumB); 呵呵 首先谢谢回贴 我研究了下你的程序,有2个疑问第1:当B饲养员有5%的概率多给1块肉的时候,这个在程序里只能进入一次 if(r < 0.05 && !oneMore) 因为需要oneMore来进入循环,而oneMore被赋予true的时候 就再也进入不了判断了,100块肉可能有5块左右有这样的概率,而这个程序只能算一次。第2:首先,--ix;这个程序我看了也很受启发是个很好的技巧,^_^,好好学了下,但我看这种情况你可能没有想过,你让程序多循环了下,但对于这个例子会出现隐藏问题,假设你多出那次又刚好在0。05循环内会出现什么情况,也就是说0。05概率多出了>=2块肉,这跟题目是不符合,多给一块肉后是不会再这块肉的情况多给肉的,因为0。05概率比较低,所以不会出现这种情况,但这个概率越大出现的问题也就越大。呵呵 我也不知道我说的对不对 望回复下哈 对于A饲养员,没有什么好说,比较简单。对于饲养员B,我觉得其实你这个题目也没有讲的十分清楚。我是在认为B绝对不会出现一次多给两块肉的情况而留下oneMore这个变量的。这个变量的作用就是为了防止这种情况,即如果已经多给了一块肉,那么oneMore为true,以后不管循环多少次,都不会再多给肉(也就是不会再进--ix这段代码了),即使出现了小于0.05的概率。如果抛开我之前的那个假设,把oneMore相关的代码删除即可。而且我认为这样更加合理,只是我认为这不是你的原意,所以才冒昧假设。 我觉得应该是这样吧,饲养员B的我觉得改成这样会比较合理int sumB = 0; for (int i = 0; i < 10; i++) { double r = Math.random(); double oneMore = Math.random(); if (r < 0.25) { if (oneMore < 0.05) sumB = sumB + 12; else sumB = sumB + 6; } else { if (oneMore < 0.05) sumB = sumB + 6; else sumB = sumB + 3; } } System.out.println("sumB="+sumB); J2SE如何从SQL Server2005中读出图片显示在JLabel中?在线等,急急 菜鸟求助~ java的一个类A要怎么写,可以让另外一个类B访问A的私有方法(俺从C++过来的) 功课成绩java 时间参数的问题 關於異常的問題 求助关于jdbc连接sql server的配置问题? tomcat 运行一段时间后几乎耗尽系统资源 对jdbc驱动数据库遇到的问题? Spring+quartz第一次执行问题 Java j2SE 5 Edition参考大全 Herbert Schildt 著.这本书对于初学者怎么样?望高手指点 初学java,向各位高手请教个问题
int sumA = 0;
for(int ix = 0; ix < 10; ++ix)
{
double r = Math.random();
if(r < 0.3)
{
sumA += 6;
}
else
{
sumA +=3;
}
}
System.out.println(sumA);
int sumB = 0;
boolean oneMore = false;
for(int ix = 0; ix < 10; ++ix)
{
double r = Math.random();
if(r < 0.05 && !oneMore)
{
oneMore = true;
--ix;
r = Math.random();
}
if(r < 0.25)
{
sumB += 6;
}
else
{
sumB += 3;
}
}
System.out.println(sumB);
第1:当B饲养员有5%的概率多给1块肉的时候,这个在程序里只能进入一次
if(r < 0.05 && !oneMore) 因为需要oneMore来进入循环,而oneMore被赋予true的时候 就再也进入不了判断了,100块肉可能有5块左右有这样的概率,而这个程序只能算一次。
第2:首先,--ix;这个程序我看了也很受启发是个很好的技巧,^_^,好好学了下,但我看这种情况你可能没有想过,你让程序多循环了下,但对于这个例子会出现隐藏问题,假设你多出那次又刚好在0。05循环内会出现什么情况,也就是说0。05概率多出了>=2块肉,这跟题目是不符合,多给一块肉后是不会再这块肉的情况多给肉的,因为0。05概率比较低,所以不会出现这种情况,但这个概率越大出现的问题也就越大。
呵呵 我也不知道我说的对不对 望回复下哈
对于饲养员B,我觉得其实你这个题目也没有讲的十分清楚。我是在认为B绝对不会出现一次多给两块肉的情况而留下oneMore这个变量的。这个变量的作用就是为了防止这种情况,即如果已经多给了一块肉,那么oneMore为true,以后不管循环多少次,都不会再多给肉(也就是不会再进--ix这段代码了),即使出现了小于0.05的概率。
如果抛开我之前的那个假设,把oneMore相关的代码删除即可。而且我认为这样更加合理,只是我认为这不是你的原意,所以才冒昧假设。
int sumB = 0;
for (int i = 0; i < 10; i++) {
double r = Math.random();
double oneMore = Math.random();
if (r < 0.25) {
if (oneMore < 0.05)
sumB = sumB + 12;
else
sumB = sumB + 6;
} else {
if (oneMore < 0.05)
sumB = sumB + 6;
else
sumB = sumB + 3;
}
}
System.out.println("sumB="+sumB);