【问题标题】:Need hints on how to solve this需要有关如何解决此问题的提示
【发布时间】:2015-09-18 07:36:48
【问题描述】:

a, b, c, d, e, f, g & h 是不同的整数。

如果a*b + c*d = e*f + g*h = n

n 的最小值是多少?

显然,如果我们考虑 8 个数字和 8 个循环,那么 for 循环将永远持续下去。有没有更简单的方法来解决这个问题?

我需要一些提示来用数学或 Python 解决它。

【问题讨论】:

  • 你说a, b, c, d, e, f, g & h are different integers。他们被定义了吗?你的问题有太多未知数。另外,SO 是为了帮助代码而不是数学方程式……提供代码或在数学交换上发帖。
  • 根据常识,答案接近负无穷。 a*b 块将分解为某个负数,c*d 块将分解为另一个负数,当它们相加时,您有 4 个变量 e*f+g*h 可以是任何值,只要它们不是相同的数字a、b、c 和 d 使左边的陈述为真。你确定你不是指positive integers
  • 都是正整数。对不起,我没有提到..

标签: python integer wolfram-mathematica


【解决方案1】:

您可以使用itertools.combinations 获取集合 {1..9} 中的所有数字组合。然后使用min 函数中的生成器表达式来查找预期结果。

>>> S=range(10)
>>> 
>>> from itertools import combinations
>>> min(a*b+c*d for a,b,c,d,e,f,g,h in combinations(S,8) if a*b + c*d == e*f + g*h)

但是由于这不会给出任何结果,所以您可以使用更大的 range() 来代替 range(10)

【讨论】:

  • 问题不清楚,这个解决方案带来了如何解决的提示。
  • @ZevChonoles 是的,刚刚修复!
  • 还可以使用itertools 中的combinations_with_replacement(),因为您想迭代重复的元素。你会有结果;)
  • @Cyrbil 不,它不应该包含重复的元素。 ;)
  • 这不行,你需要测试每个组合的所有排列。
【解决方案2】:

对于正整数,(1 到 8)

First@Sort@DeleteCases[({a, b, c, d, e, f, g, h} = #;
      If[(n = a*b + c*d) == e*f + g*h,
       {n, a, b, c, d, e, f, g, h}]) & /@ Permutations[Range[8]], Null]

{31, 1, 7, 4, 6, 2, 8, 3, 5}

最少 n = 31

【讨论】:

  • 那很快。谢谢克里斯·德格宁
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-24
  • 1970-01-01
  • 2020-06-15
  • 1970-01-01
  • 1970-01-01
  • 2018-05-21
相关资源
最近更新 更多