【问题标题】:How to generate random numbers to make fixed result?如何生成随机数以产生固定结果?
【发布时间】:2019-10-17 03:18:55
【问题描述】:

我有这个公式:

(x + y + z + t)/4.8 = 3.7

我希望能够为所有变量生成 1 到 8 的随机数(整数),以便获得 3.7 的最终结果。

我尝试了嵌套循环,但不知何故它不起作用:(我正在学习 Javascript。

感谢每一个帮助。

【问题讨论】:

  • 您希望随机到何种程度,因为如果您使用与Math.random 提供的一样多的数字,您的程序不会很快完成?
  • 您好,问得好。我应该把它放在我的OP中。是的,我希望数字是整数,所以它会缩小很多。
  • 为什么是随机的?鉴于每个变量的范围很短,您可能会比选择随机数更快地迭代(3 个嵌套循环)
  • 这似乎不是特别困难,尤其是如果您使用嵌套循环。看起来你只是想让别人帮你做作业。
  • 这仍然永远不会终止。

标签: javascript random


【解决方案1】:

首先,设置一个值为3.2 * 4.8的变量,这是x + y + z - 7

target = 3.2 * 4.8

接下来用 7 添加目标,所以我们得到x + y + z 这得到我们22.36

然后得到z和x

z = Math.random() * 8;
x = Math.random() * 6;

假设我们得到了两者的最大数量,即 z = 8 和 x = 6

然后得到 y

y = target - x - z

所以y = 22.36 - 8 - 68.36 大于6(超出范围),因此这是一个不可能的要求

target = 3.2 * 4.8 + 7;
z = 8;
x = 6;
y = target - x - z;
console.log(x, y, z, target);

【讨论】:

  • 不错的@Phil:D
  • 嗨。我现在明白了。我刚刚修复了条件,我想我终于可以用嵌套循环弄清楚了。我会试一试。非常感谢!!
  • @TrungHà 不,这仍然是不可能的
【解决方案2】:

首先,得到满足方程的x、y、z的所有值。然后从 satisfyResults 中选择随机结果。 对于预定义范围内的 x、y、z 的每个整数值,这里的情况都不匹配。

var satisfyResults = [];
for(var x=1;x<=6; x++) { 
    for(var y=1;y<=6;y++) { 
        for(var z=1;z<=8;z++) { 
            if ((x + y + (z-7)) / 4.8 === 3.2) { 
                satisfyResults.push([x, y, z])
            }
        }
    } 
}

if (satisfyResults.length <= 0) {
  console.log("There is no match!")
} else {
  var result = satisfyResults[Math.floor(Math.random() * satisfyResults.length)]
  console.log(result);
}

【讨论】:

    【解决方案3】:

    尝试以下解决方案,因为循环将一直持续到值不等于 3.7

    function getRand(min,max){ return Math.floor(Math.random()*(max-min+1)+min) } 
    
    var result;
    
    while (result !== 3.7) {
      x = getRand(1,8);
      y = getRand(1,8);
      z = getRand(1,8);
      t = getRand(1,8);
      console.log('x : ', x ,' y : ', y ,'z : ', z ,'t :', t);
    	result = Math.round( ((x + y + z + t)/4.8 ) * 10 ) / 10;
      console.log('result : ', result);
    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-20
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-11
      • 1970-01-01
      • 2012-09-24
      相关资源
      最近更新 更多