我正在学习编程(Python和算法),并且正在尝试处理我感兴趣的项目.我已经创建了一些基本的Python脚本,但我不确定如何处理我正在尝试构建的游戏的解决方案.
以下是游戏的工作方式:
将为用户提供具有值的项目.例如,
Apple = 1
Pears = 2
Oranges = 3
Run Code Online (Sandbox Code Playgroud)
然后他们将有机会选择他们喜欢的任何组合(即100个苹果,20个梨和一个橙色).计算机获得的唯一输出是总值(在此示例中,它当前为143美元).电脑会试着猜猜他们有什么.显然,第一回合无法正确使用.
Value quantity(day1) value(day1)
Apple 1 100 100
Pears 2 20 40
Orange 3 1 3
Total 121 143
Run Code Online (Sandbox Code Playgroud)
下一轮用户可以修改他们的数量但不超过总数量的5%(或者我们可能选择的其他百分比.例如,我将使用5%).水果价格可以随意变化,因此总价值也可能因此而变化(为简单起见,本例中我没有改变水果价格).使用上面的例子,在游戏的第2天,用户在第3天返回$ 152和$ 164的值.这是一个例子:
Quantity (day2) %change (day2) Value (day2) Quantity (day3) %change (day3) Value(day3)
104 104 106 106
21 42 23 46
2 6 4 12
127 4.96% 152 133 4.72% 164
Run Code Online (Sandbox Code Playgroud)
*(我希望表格显示正确,我必须手动分隔它们,所以希望它不仅仅是在我的屏幕上进行,如果它不起作用,请告诉我,我会尝试上传截图.)
我试图看看我是否可以计算出一段时间内的数量(假设用户有耐心继续输入数字).我现在知道我唯一的限制是总价值不能超过5%所以我现在不能达到5%的准确度,所以用户将永远进入它.
到目前为止我做了什么
到目前为止,这是我的解决方案(不多).基本上,我采取所有的价值观并找出他们所有可能的组合(我完成了这一部分).然后我拿出所有可能的组合并将它们作为字典放入数据库中(例如,对于143美元,可能有一个字典条目{apple:143,Pears:0,Oranges:0} ..一直到{apple :0,Pears:1,Oranges:47}.每次我得到一个新号码时都这样做,所以我列出了所有可能性.
这就是我被困的地方.在使用上述规则时,我如何找出最佳解决方案?我想我需要一个健身功能,可以自动比较两天的数据,并消除前几天数据差异超过5%的任何可能性.
问题:
所以我的问题是用户改变总数而我有一个所有概率的列表,我该如何处理?我需要学习什么?是否有任何算法或我可以使用的理论适用?或者,为了帮助我理解我的错误,你能否建议我可以添加哪些规则以使这个目标可行(如果它不在当前状态.我正在考虑添加更多水果并说他们必须选择至少3个等等.) ?另外,我对遗传算法只有模糊的理解,但我认为我可以在这里使用它们,如果有什么我可以使用的吗?
我非常非常渴望学习,所以任何建议或提示将不胜感激(只是请不要告诉我这个游戏是不可能的).
更新:获得这很难解决的反馈.所以我认为我会在游戏中添加另一个条件,它不会干扰玩家正在做的事情(游戏对他们保持不变),但每天水果的价值会随机变化(随机).这会让它更容易解决吗?因为在5%的运动和某些果实值变化中,随着时间的推移可能只有少数组合.
第1天,任何事都有可能并且获得足够接近的范围几乎是不可能的,但随着水果价格的变化而用户只能选择5%的变化,那么不应该(随着时间的推移)范围变窄和变窄.在上面的例子中,如果价格足够波动,我想我可以强行推出一个解决方案给我一个范围来猜测,但我想弄清楚是否有一个更优雅的解决方案或其他解决方案来保持缩小这个范围时间.
更新2:在阅读并询问后,我相信这是一个隐藏的马尔可夫/维特比问题,它跟踪水果价格的变化以及总和(加权最后的数据点最重).我不知道如何应用这种关系.我认为情况确实如此,但至少我开始怀疑这是某种类型的机器学习问题.
更新3:我创建了一个测试用例(数字较小)和一个生成器来帮助自动生成用户生成的数据,我试图从中创建一个图表来查看更有可能的数据.
这是代码,以及用户实际结果数量的总值和注释.
#!/usr/bin/env …Run Code Online (Sandbox Code Playgroud) 我想知道我们可以用多少种方式将数字 x 表示为给定数字集合 {a1.a2,a3,...} 中的数字之和。每个数字可以被多次取走。
\n\n例如,如果x=4且a1=1,a2=2,则x=4的表示方式为:
\n\n1+1+1+1\n1+1+2\n1+2+1\n2+1+1\n2+2\nRun Code Online (Sandbox Code Playgroud)\n\n因此路数=5。
\n\n我想知道是否存在一个公式或其他一些快速方法可以做到这一点。我无法用暴力破解它。我想为它编写代码。
\n\n注意:x 可以大到 10^18。a1,a2,a3,\xe2\x80\xa6 的项数最多可达 15 个,并且 a1,a2,a3,\xe2\x80\xa6 中的每一项也最多只能达到 15 个。
\n假设我有一个整数result和一个整数数组,让我们说[a,b,c](不是固定的长度).我需要检测是否result=a*i +b*j + c*k,用i,j,k>=0.
如果有可能,我更喜欢C/C#中的解决方案.
PS问题来自预订系统,如果其持续时间是给定持续时间的组合,则可以出售旅行.
谢谢!
例如:如果我们有a = 3,则b = 7而不是rezult 20 = 3*2 + 7*2结果9 = 3*3 + 7*0
我正在尝试编写一种算法来确定线性方程,特别是ax + by = c的形式,对于给定的a,b,c是否具有正整数解.它需要是有效的,因为数字a,b和c可以在0 <= a,b,c <= 10 ^ 16的范围内.我该如何处理这个问题?
由于它是一个丢番图方程式,我试图检查a和b的GCD是否除以c,但这样我无法区分正,负或零解.
我在这里找到了一个解决方案,但我并不太明白.也许有人可以为我简化它?因为这个很通用,我只对2个变量的方程感兴趣.