【问题标题】:weighted boolean value - scaling加权布尔值 - 缩放
【发布时间】:2013-06-04 08:02:57
【问题描述】:

我不确定如何实现,但这里是描述:

  • 输入一个介于 0-10 之间的数字(0 始终返回 false,10 始终返回 true)
  • 将接收到的参数作为输入,并传递给函数,在运行时确定所需的布尔值是真还是假

比如说:

输入数字 7 ->(7 有 70% 的机会生成真正的布尔值) -> 传入函数,获取函数生成的布尔值。

此函数将运行多次 - 可能超过 1000 次。

感谢您的帮助,我很感激。

【问题讨论】:

  • 到目前为止你尝试过什么?如果您不知道从哪里开始,我会从这个问题开始:stackoverflow.com/questions/9471604/…
  • 使用随机数生成器。
  • 我正在使用随机数生成器。

标签: c++ c algorithm boolean


【解决方案1】:
bool func(int v) {
  float f = rand()*1.0f/RAND_MAX;
  float vv= v / 10.0f;
  return f < vv;
}

【讨论】:

    【解决方案2】:

    我会说生成一个代表百分比(例如 1 到 100)的随机数,然后如果随机数小于或等于百分比机会,则将其标记为真,否则将其标记为假。

    【讨论】:

      【解决方案3】:

      这是一个想法,我不确定它是否会有所帮助;

      bool randomChoice(int number){
          int result =rand() % 10;
          return number>=result;
      
          }
      

      希望对你有帮助

      【讨论】:

      • 那里有一些额外的牙套。 if (number&gt;=result) return true; else return false; 也有点反模式。只是return (number&gt;=result); 哦,你在调用哪个random() 函数? stdlib 不接受参数linux.die.net/man/3/random
      • 确认,不要每次拨打rand时都拨打srand只调用一次
      • 是的,在每次通话时将随机数重新播种到当前时间是一种让您的号码完全不随机的绝妙方法。
      【解决方案4】:

      这是一个有趣的问题!这是我认为你应该做的,用伪代码:

      boolean[] booleans = new boolean[10]; //boolean array of length 10
      
      function generateBooleans(){
          loop from i = 0 to 10:
              int r = random(10);    //random number between 0 and 9, inclusive
              if(r < i){
                  booleans[i] = true;
              }
          }
      }
      

      然后您可以将用户的输入与您的布尔数组进行比较,以获得预先确定的布尔值:

      boolean isTrue = booleans[userInputNumber]
      

      【讨论】:

        猜你喜欢
        • 2015-10-29
        • 2012-09-19
        • 1970-01-01
        • 1970-01-01
        • 2017-04-08
        • 2020-01-10
        • 1970-01-01
        • 2013-04-20
        • 1970-01-01
        相关资源
        最近更新 更多