求一个随机算法

发布于 2022-09-02 16:04:17 字数 196 浏览 18 评论 0

输入是两个数字,一个总次数,一个是成功次数。例如100次可以成功10次。

要求是一个函数 foo(),在已知这两个输入的情况下,被调用100次,始终返回10次true, 90次false

笨的办法不难找。想看看各位算法高手有没有优雅一点的。最好是javascript的

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

与之呼应 2022-09-09 16:04:17
function determinedRandom(total, pass) {
    var array = new Array(total)
        .fill(false)
        .fill(true, 0, 10)
        .sort(() => Math.random() < 0.5);
    return () => array.pop();
}

Unit Test:

var fn = determinedRandom(100, 10);
var pass = 0;

for (var i = 0; i < 100; i++) {
    if (fn())
        ++pass;
}

console.log(pass);
苍景流年 2022-09-09 16:04:17

clipboard.png]

es6写很简洁- -

var foo = (function(){
  var pointer = -1,_result
  //创建指定长度的指定值占指定数量的数组
  var mark_arr = (num,total) => Array.from(new Array(total)).map((k,i)=>i < num)
  //数组打乱排序
  var random_arr = (arr) => arr.sort(()=>Math.random() < 0.5 ? 1 : -1)
  //调用100次的函数
  return (total,success)=>{
    if(pointer >= total) pointer = -1
    //生成指定数量数组并且打乱
    if(pointer===-1)  _result = random_arr( mark_arr(success,total) )
    //返回当前指针所在值
    return _result[++pointer]
  }
})()

翻译一下es5的结果

"use strict";

var foo = function () {
  var pointer = -1,
      _result;
  //创建指定长度的指定值占指定数量的数组
  var mark_arr = function mark_arr(num, total) {
    return Array.from(new Array(total)).map(function (k, i) {
      return i < num;
    });
  };
  //数组打乱排序
  var random_arr = function random_arr(arr) {
    return arr.sort(function () {
      return Math.random() < 0.5 ? 1 : -1;
    });
  };
  //调用100次的函数
  return function (total, success) {
    if (pointer >= total) pointer = -1;
    //生成指定数量数组并且打乱
    if (pointer === -1) _result = random_arr(mark_arr(success, total));
    //返回当前指针所在值
    return _result[++pointer];
  };
}();
一笔一画续写前缘 2022-09-09 16:04:17

用现成的随机方法,获取一个0-9的随机整数。java: Math.abs(Random.nextInteger())%10 ,判断该数是0则返回true,否则false

心是晴朗的。 2022-09-09 16:04:17

建立A个false的数组X(); 循环A/B次(C=0; C=C+random(B); X(C)=true)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文