我想分成104个随机数的数组,但都不能0或不高于4.例如[1,2,3,4],[1,4,4,1]或[4,2,3,1].
我认为这是一个简单的问题,但由于某种原因,我无法想到如何做到这一点.如果有人有一些非常有帮助的指示!
编辑:这是我现在的代码,但我生成的总数低于10:
let formation = [];
let total = 0;
for (let i = 0; i < 4; i ++) {
if (total < 9) {
formation[i] = Math.floor(Math.random() * 4) + 1;
} else {
formation[i] = 1;
}
}
Run Code Online (Sandbox Code Playgroud) 在给定一定的预算和组合的最大限制的情况下,我希望最大限度地增加星星的数量。
示例问题:
预算为 500 欧元,只访问允许的最大餐厅或更少,用餐并收集尽可能多的星星。
我正在寻找一种高效的算法,它可能会处理 100 万个餐厅实例,最多 10 个餐厅。
请注意,这是我昨天问的一个问题的交叉帖子: Java:基于字段获取大型对象列表的最有效组合
下面的解决方案将为r8餐厅分配每颗星 15 美元,这意味着在生成列表时,它首先将其放入列表中,剩下的 70 美元只能再获得 2 颗星,总共 4 颗星。但是,如果它足够聪明,可以跳过r8餐厅(即使它是每星级的最佳美元比率),该r1餐厅实际上是预算的更好选择,因为它的成本为 100 美元和 5 颗星。
任何人都可以帮助尝试解决问题并击败当前的解决方案吗?
import itertools
class Restaurant():
def __init__(self, cost, stars):
self.cost = cost
self.stars = stars
self.ratio = cost / stars
def display(self):
print("Cost: $" + str(self.cost))
print("Stars: " + str(self.stars))
print()
r1 = Restaurant(100, 5)
r2 = Restaurant(140, 3)
r3 = Restaurant(90, 4)
r4 = Restaurant(140, 3)
r5 = …Run Code Online (Sandbox Code Playgroud) 我试图从表中选择三个随机行,其中它们的组合item_price列小于所需的量.
想象一下你有<input>一美元金额.输入美元金额时,数据库会返回三个随机项,其中组合价格小于或等于您输入的金额.
如果我输入300美元,你可以购买这三件商品,150美元,100美元和50美元.我在创建一个将返回符合此条件的三个项目的查询时遇到困难.
SELECT t1.item_id, t1.item_price
FROM items t1
INNER JOIN items t2 ON ( t1.item_id = t2.item_id )
GROUP BY t1.item_id, t1.item_name, t1.item_price
HAVING SUM( t2.item_price ) <=300
ORDER BY RAND( )
LIMIT 3
Run Code Online (Sandbox Code Playgroud)
我认为这样可行,但我认为这只是一个巧合.它似乎只返回价格低于300美元,而不是总价不到300美元的任何三件商品.
我也试过这个查询:
SELECT t1.item_id, t1.item_price
FROM items t1
JOIN items t2 ON t2.item_id <= t1.item_id
WHERE t2.item_price <= 500
GROUP BY t1.item_id
HAVING SUM(t2.item_price) <= 500
ORDER BY RAND()
LIMIT 3
Run Code Online (Sandbox Code Playgroud)
再次,似乎首先工作,但后来它开始返回2000美元的项目.
如果在PHP中有更好的(甚至牺牲性能)方式,我不介意.我只是觉得查询不会那么困难.
一如既往,感谢任何人的帮助.