【问题标题】:Google Spreadsheet - Perform Random Operation 40 Times and Store Additive ResultGoogle 电子表格 - 执行 40 次随机运算并存储加法结果
【发布时间】:2013-10-06 01:29:45
【问题描述】:

快速提问,我使用的是 Google 电子表格,我把它放在一个单元格中。

=If(RANDBETWEEN(1,40)=1,1,0)

上面是我用来生成 1 到 40 之间的随机数的代码。如果它恰好落在“1”上,那么它将“1”返回到单元格,否则返回 0。我希望这个循环可以循环说'20' 次。

因此,假设在 20 次尝试中,“1”可能会出现“3”次。我正在寻找能够总计输出“1”并输出值的随机事件数量的代码。

因此,如果它发生 '3' 次,它将输出 3。如果在循环期间随机触发 '1' '5' 次,它将返回 5,依此类推。

如何在 Google 电子表格中执行此操作?

【问题讨论】:

  • 复制20次,例如进入单元格 A1 到 A20。然后使用 =sum(A1:A20) .. 这不是发布此类内容的好地方,建议您使用 google 电子表格论坛:productforums.google.com/forum/#!categories/docs/spreadsheets
  • 好主意,我喜欢这样,我在下面也贴了一个解决方案,你觉得哪个更快?

标签: spreadsheet google-spreadsheet-api


【解决方案1】:

好吧,我找不到通过普通命令的方法,但是如果您进入脚本编辑器并添加以下内容:

function calcRandomTotal(iterations,percentChance){
  var maxNumber = 1/percentChance;
  var hits = 0;
  var randNum = 0;

  for(i=0;i<iterations;i++){
    randNum = randomFromInterval(1,maxNumber);
    if(randNum == 1){
      hits++; 
      randNum = 0;//reset it
    }
  }

  return hits;
};

function randomFromInterval(from,to)
{
    return Math.floor(Math.random()*(to-from+1)+from);
}

然后简单地说 = calcRandomTotal(iterations,percentChance) 或 calcRandomTotal(20,0.025)(因为 0.025 是 2.5% 或 1/40 的机会。这将运行随机模拟进行一定数量的迭代并返回总结果。

【讨论】:

  • 如果有人有更好的解决方案,请告诉我。这样做的缺点是计算有点慢
【解决方案2】:

我找到了另一种无需任何代码的解决方案!

=IFERROR(ArrayFormula(sum(randbetween(0,10)+(row(indirect("A1:A"&(D$125)))*0))),0)

这个想法是使用数组公式并欺骗它认为有很多单元格使用了间接函数,在我的例子中,D$125 是指一个单元格,你想要迭代 randbetween 多少次。

享受吧!

【讨论】:

  • 唯一的缺陷是,无论选择什么随机数,它似乎都坚持所有迭代。如果有人可以改进这个概念,请做!
猜你喜欢
  • 1970-01-01
  • 2019-08-28
  • 2015-01-02
  • 1970-01-01
  • 2020-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多