使用 shell 脚本进行排列或组合

使用 shell 脚本进行排列或组合

每天都会向文件中添加一个数字。例如 1000、2000、2560、5356 等,直到该月的最后一天,最多可表示 30/31 个数字。我想编写一个shell脚本,当我传递一个像5560这样的随机数时,这个5560可以是任何2或3或4或5个数字的组合,其总和等于5560。这些数字可以是任何排列或组合。应打印所有这些数字,其总和等于传递的随机数 5560。

我能想到的可能的解决方案:

  1. 循环遍历文件并将所有值存储在数组中。
  2. 使用大括号来组合数组元素

答案1

加法是可交换的。因此,特定组合的总和与相同数字的任意排列的总和相同。

这应该可以节省一些时间。我相信 31 个数字 {2,3,4,5} 一次的组合数是仅有的206,336,而一次排列{2,3,4,5}的数量是21,172,380。

组合很适合递归解决方案,但 shell 中的运行时可能会很烦人,甚至令人望而却步。您会考虑awk解决方案吗?

文件中的所有数字都是唯一的吗?如果 (3 + 3) = 6,则有两个(相同的)组合,因为 3 可以重新排序。

相关内容