游戏开发论坛

 找回密码
 立即注册
搜索
楼主: finalk

[讨论] 求解一道数值题

[复制链接]

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2011-6-9 14:25:00 | 显示全部楼层

Re:求解一道数值题

第一步=1个
第二步=13/3个
第三步=43/3个
最后一步=233/3个

我擦
总共需要292/3个,大概是97.333333个

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2011-6-9 14:52:00 | 显示全部楼层

Re: Re:求解一道数值题

grspace: Re:求解一道数值题
N2=60%*1+40%*(1+N1+N2)

这两个可以划等号吗?
N2=第二步骤所需石头数量。
右边的 60%*1=成功情况所占石头数量,好理解
右边的 40%*1=失败情况所浪费的石头数量,好理解
右边的 40%*N1=失败后重新升回所需石头数量,好理解

可是 40%*N2,这个怎么解释呢?
40%只能在失败的时候乘上。N2是总次数,包含了成功和失败的。
这样乘上,符合题意吗?

我不认为“N2=60%*1+40%*(1+N1+N2)”这个等式是成立的。40%*N2,这个没道理。

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2011-6-9 15:03:00 | 显示全部楼层

Re:求解一道数值题

要不这样吧。
我们请程序员们设计个C语言程序,让程序模拟几万次,看看结果更接近谁的吧。

我的答案是97.3个。

grspace的方法
N1=1.
N2=60%*1+40%*(1+N1+N2),N2=(7/5)/(3/5)=7/3次
N3=40%*1+60%*(1+N2+N3),N3=(1+7/3*3/5)/(2/5)=6次
N4=20%*1+80%*(1+N3+N4),N4=(12/5*4/5)/(1/5)=29次
这样的话,N1+N2+N3+N4=38.333333次

一个97次,一个38次,这差距很明显。
用C语言模拟的话,马上就能知道谁对谁错。

1

主题

108

帖子

125

积分

注册会员

Rank: 2

积分
125
发表于 2011-6-9 15:06:00 | 显示全部楼层

Re:求解一道数值题

40%表示失败了,所以需要*(1+N1)。失败之后下次的失败或者成功是未知的,所以是未知数N2.

1

主题

108

帖子

125

积分

注册会员

Rank: 2

积分
125
发表于 2011-6-9 15:08:00 | 显示全部楼层

Re:求解一道数值题

LZ在10楼的模拟已经正确,这里我就不多做解释了。

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2011-6-9 15:18:00 | 显示全部楼层

Re: Re:求解一道数值题

grspace: Re:求解一道数值题
40%表示失败了,所以需要*(1+N1)。
失败之后下次的失败或者成功是未知的,所以是未知数N2.

失败之后“下次的”失败或者成功是未知的,所以是未知数N2

下次的是未知的,所以你把 包括这次也在内的整个N2也给算进去了?
下次的是未知的,那么就不能把已经成功了的那个60%(至少第一次那1个里的60%)是不能算进去的。
而你却算在里面了。

再者,10L的模拟是根据这个公式来模拟的结果,又不是根据题意来模拟的,怎么算都会跟你的结果一致啊。
我说的是根据题意进行模拟,看看是否谁的结论正确吧。这样才公平。

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2011-6-9 15:19:00 | 显示全部楼层

Re:求解一道数值题

我坚持认为正确答案是 97.3次

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2011-6-9 15:48:00 | 显示全部楼层

Re:求解一道数值题

  1. int n=10000;//统计10000次
  2. int level=0;//0=D,1=C,2=B,3=A,4=S
  3. int s[10000];//10000次结果保存
  4. int a;//10000个答案的平均值

  5. for(n=10000;n>0;n--)
  6. {
  7.   level=0;
  8.   s[n]=0;
  9.   while(level<4)
  10.   {
  11.     switch(level)
  12.     {
  13.       case 0:
  14.       level++;
  15.       s[n]++;
  16.       break;
  17.     case 1:
  18.       if(rand(100)<60)
  19.       {
  20.         level++;
  21.         s[n]++;
  22.       }
  23.       else
  24.       {
  25.         level--;
  26.         s[n]++;
  27.       }
  28.       break;
  29.     case 2:
  30.       if(rand(100)<40)
  31.       {
  32.         level++;
  33.         s[n]++;
  34.       }
  35.       else
  36.       {
  37.         level--;
  38.         s[n]++;
  39.       }
  40.       break;
  41.     case 3:
  42.       if(rand(100)<20)
  43.       {
  44.         level++;
  45.         s[n]++;
  46.       }
  47.       else
  48.       {
  49.         level--;
  50.         s[n]++;
  51.       }
  52.       break;
  53.     default:
  54.       break;
  55.     }
  56.   }
  57.   a+=s[n];
  58.   printf("%d",s[n]);
  59. }
  60. a/=10000;
  61. printf("%d",a);
复制代码

是这么写吗?

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2011-6-9 17:35:00 | 显示全部楼层

Re:求解一道数值题

用C语言模拟之后,结果是39

为什么呢

0

主题

114

帖子

181

积分

注册会员

Rank: 2

积分
181
发表于 2011-6-9 17:40:00 | 显示全部楼层

Re:求解一道数值题

=1个 + 40%*(回到C需要1个 + 再消耗1个目的为B + 40%再次悲剧*(回到C需要1个 + 再消耗1个目的为B......
你这里错在
"1个"应该是"1*0.6"
"40%*(回到C需要1个 + 再消耗1个目的为B" 应该是"0.6*0.4^1*(1+2)*1"
整体是
=0.6*1+0.6*0.4^1*(1+2)*1+0.6*0.4^2*(1+2)*2+0.6*0.4^n*(1+2)*n...
你漏掉了成功率,所以就算多了@@;另外消耗的计算也错了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-8-18 23:44

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表