我想问:
- 我有任何正整数,比方说:
10
- 然后我得到随机整数(它们也是随机计数),比方说:
5, 7, 8
- 我想计算 float ,例如:
5*x + 7*x + 8*x = 10
- 我现在知道了,但我希望它具有共同的下限(比如
3
),例如:
5 * x > 3
7 * x > 3
8 * x > 3
- 可以纠正数字(比率)以达到这种状态,因此在这个特定示例中它将是这样的:
sum = 5 + 7 + 8 = 20 x = 10 (total) / 20 (sum) x = 0.5 results: 5*0.5 + 7*0.5 + 8*0.5 = 2.5 + 3.5 + 4 = 10 (total)
到目前为止一切顺利,但 2.5
现在低于给定的最小值。限制3
,那么如何解决呢!
这可能吗,如果可能的话,怎么做到的? (最好在 C# 中)
最佳答案
让我们以您的示例为例,看看我们将如何解决它。
我应该将 5x 7x 8x 的使用更改为 5x 7y 8z 的使用,因为已经决定这些必须更改以满足要求,因此不会全部相同。
So currently you get a total answer of 10 by having
5 times 0.5 = 2.5
7 times 0.5 = 3.5
8 times 0.5 = 4
但是,5 乘以 0.5 不大于 3
因此要使 5 倍 x 至少为 3,我们必须将总数增加 0.5
3(你至少想要的数字)- 2.5(你有的数字)是 0.5
因此 TOTAL 必须增加 0.5。
x must = 3 的 5 倍我们可以看到 x must = 3 除以 5 得到 0.6
now lets recalculate your sum
5 times 0.6 = 3
7 tiems 0.5 = 3.5
8 times 0.5 = 4
加在一起 = 10.5...啊,真棒。
好的所以我们可以看到 y 或 z 必须变小以确保答案仍然正好是 10
所以让我们选择 8 次 z = 4(因为 4 是 3 的进一步,并且会给我们最大的背风)
0.5 除以 8 = 0.0625
所以 z 必须减少 0.0625 才能抵消 5 倍 x 增加 0.5
所以 z 现在 = 0.5 - 0.0625 即 0.4375
lets redo your sum with these new numbers!
5 times 0.6 = 3
7 times 0.5 = 3.5
8 times 0.4375 = 3.5
3 加 3.5 加 3.5 = 10!我们成功了!呀呀呀
希望对您有所帮助!如果不是很好,我还是喜欢这样做 :D
总而言之,我们必须增加 x 以使 5x 至少为 3,但 x 的增加意味着答案大于 10,因此无论总增加量是多少,y 或 z 都必须减少以抵消这一点,我们这样做增加除以其他数字之一,计算出我们需要从 z 或 y 中减去多少才能再次 = 完美的 10
关于c# - 如何将总数除以给定因素和下限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10536765/