五组数据,两两组合使用后总数递减,如何快速把五组数据的值配成同一数字

有数据 A B C D E,五组,均为正整数。
有下列几种使用情况:
A+C A+D B+C B+D B+E C+D C+E D+E
组合使用后库存数量减一。
当随机使用后,有没有什么办法,在Excel里列出,通过上述组合使用的方式,快速将 A=B=C=D=E的步骤?

简单说,就是数据不均衡的情况下,如何通过上述组合的方式,让所有数据等于同一个正整数的方法。

我实在找不到头绪该如何做这类的计算,所以请教一下,Excel中是否有计算步骤的这类可能性。

Excel不清楚,但是我有一个思路

首先比如指定这个正整数为N, 然后每组多出来的数目为

  • a = A - N
  • b = B - N
  • c = C - N
  • d = D - N
  • e = E - N

然后从abcde里面拿出来一个最大的和一个最小的,一直重复下去就行了

比如说 A = 15, B = 16, C = 20, D = 18, E = 18,

假设N就是15, 那么 a = 0, b = 1, c = 5, d = 3, e = 3,,

接下来从abcde中最大c和最小b中取 B + C, 现在 a = 0, b = 0, c = 4, d = 3, e = 3

第二步同样取最大c和最小de中随便拿一个 C + D, 现在 a = 0, b = 0, c = 3, d = 3, e = 2

然后重复取分别是 C + E, D + E, C + D, C + D

其实写到这里再仔细想想, 在Excel里面还是可以用公式来实现的,我先想想

我想完了,但是不知道怎么共享出来

通过函数应该实现不了,可以尝试VBA

其实,我是真没读懂你到底想干什么。。。给个例子说明下也好

读了好几遍没读懂,我溜了

抛开Excel,仅考虑算法.

如果只有一至两组数据,无法实现该问题,因此至少需要3组数据.

假设有ABC3个数据,A<B<C,那么我们只要让最小的两个数相等即可实现.

例如A=5 B=7 C=11,那么我们第一步就是

B-2,C-2,之后A=5,B=5,C=9.

下一步是C-(C-B)*2,即C-8,A和B分别-4,之后A=B=C=1

换组数据

例如A=9 B=6 C=12,那么我们第一步就是

A-3,C-3,之后A=6,B=6,C=9.

下一步是C-(C-B)*2,即C-6,A和B分别-3,之后A=B=C=3

注意,这三个数相加的值必须是偶数或-3后必须是偶数,否则不可能实现.

对于五组数据,只需要将倒数第二的值处理到等于倒数第一的值就可能按照上面的算法计算了.

例如A=5 B=15 C=7 D=3 E=20

第一步把A处理到A=D,从最大的E里面减,(相当于拿2次AE)处理后

A=3 B=15 C=7 D=3 E=17

第二步让B=C=7,从最大的E里面减(相当于拿8次BE),处理后

A=3 B=7 C=7 D=3 E=9

第三步 让BCE相等(相当于拿两次BE,两次CE),处理后

A=3 B=5 C=5 D=3 E=5

第四步让五个数相等,即BCE各减2.(相当于BC,CE,BE各拿一次)

跟上面一样,五个数的和应该是偶数或者-5以后是偶数(即两个一拿,拿到最后要么剩0个要么各剩一个即5个.)同时最大数不应大于其他几个数相加的和.

换组数据:

例如A=3 B=25 C=14 D=17 E=10(和为69,-5以后为64为偶数)

第一步让E=A,BE拿7次.

A=3 B=18 C=14 D=17 E=3

第二步 让D=C,DB拿3次

A=3 B=15 C=14 D=14 E=3

第三步 让BCD相等,BC,BD各拿一次

A=3 B=13 C=13 D=13 E=3

第四步,让ABCDE相等,即BC,CD,DE各拿(13-3)/2次

A=3 B=3 C=3 D=3 E=3

害,,, 如果是暗黑3的悬赏材料的话,, 从赛季初就开始整轮整轮的做就好了,, 要做T6的就做完T6, 要做T16就做完T16,, 五章全做完再换难度

反正新赛季马上开,, 从头开始

那是自然的,最终结果是统一的,每次能消掉的数量也是一定的.

如果是用高级语言写程序,而且目的只是获得解,那就没啥意思了

对,这个思路正是我苦苦思考的。原先完全就是拼运气去撞,把五组数字中最大和较大的尽量削减,再利用 B项目可与C D E组合的特性进行配平。但实话,我这个脑袋,就成功过2次,且当时忘记记录配平步骤,那是我最大的遗憾。

“随机撞库”是歪门邪道。。。正常去写递归才是正途。。。

另外,非要用Excel而不用VBA,我觉得只能手动+宏才能搞定。。。不过都用宏了,也就相当于用了VBA吧。。。

还不是任意两个组合啊…

您有一份文件待查收!即刻点击链接获取文件:https://c-t.work/s/60143deb9ee546 或进入cowtransfer.com 获取,在首页输入取件码:a7mcf6(24小时内有效)

修改了一下,逻辑是@ddos提出的,先找出最大的一项,有多项时找前面的,然后找到能与之匹配的不是最小的那一项,两两消除.

但是取小数的时候逻辑很混乱,首先A不做最小值,当A为最大,且CD为最小的时候,选C而不选BE,因为不能匹配.当B至D都没做为最小时,取E做最小(当A为最大时,会取C做最小,所以不会出现AE组合).当E为最大时,取B为最小.

肯定不是最优解,也不保证没错误.

我的设想是,做A~E五个横向表格,填入数字,结果是,通过上述哪几种组合,能最快速实现的步骤。但是这个变量的定义和结果计算与输出,我就不知道怎么弄了。我做最复杂的Excel也只是远程调取某个表单内的值,并在结算结果之后做一个判断在当前结果单元格内显示不同的颜色或者信息。抑或,用Excel做5层嵌套的if函数判断最终反馈一个需要的值。比如快递费的计算。

再深入就没头绪了。

这个缘起于暗黑3里,五组悬赏材料的组合使用,我喜欢看到平衡而不是错综复杂的乱数。就一直在想办法能否做一个简化方式,配平这些数字。
这纯属是我的一个执念,既然碰到问题,我也想试试看,能否解决掉这个问题,也许会成为今后解决问题的一个线索,所以才发帖询问,探究下可能性。
我觉得,最有可能实现这一功能的,可能也就是Excel了。其它方式方法不了解。

非常感谢您做的Excel,我今天实测了一下,到第二步就发现有问题了。具体图片在 https://c-t.work/s/c74077ee764d40
提取码是b7ngze。在组合中,不存在A+B这个组合。

其实,我觉得单纯从算法来看,这就是“走迷宫”的算法,不用想的太复杂。
只不过要比“迷宫”问题简单很多(有约束条件),并且所有的解都是最优解,这样问题就简化很多:

  • 约束条件:
  1. 每次选择“消去组合”,必须包含至少一个最大值所在位置。
  2. 每次选择“消去组合”,不能包含所有最小值所在位置。

按照这个约束,去写递归(也可以用其他迷宫算法)很容易,但是个人抵触递归,就用“随机撞库”,对于这个强约束问题,是很容易得到结果的。

  • 比如你给的例子:A=3 B=25 C=14 D=17 E=10,我5次运算结果:
N 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
1 BE BD BD BC BD BC BC BE BD BD BE BD BC BE BD BC DE CD BD BC BC DE BE CD BD CD BC
2 BD BE BD BD BC BE BE BD BD BE BE BD BD CD CD BC BD CE BC BE BD CD BC BD CD BC BC
3 BC BD BD BD BD BC BE BE BC BC BE BD BE BC DE BD BC DE DE BD CD BD BD CD BC BC BC
4 BD BE BD BD BD BD BD BC BC BC BC BD BE BE BE BD CD BD CD BD CE CE BD BD CE BC BC
5 BD BD BC BD BC BC BE BD BE BD BD BD BC BD BC BD BE CE CE BD DE BE CD CD BD BC BC
  • 可以看出,无论几次结果需要的次数是一样的,只不过路经不同。

利用@Niceb的思路简单的分析了一下,有一个难点就是有多个相等值的时候怎么处理,我的解决方案是用两个辅助行加一个辅助列,

另外一个是并不是所有题目都有解.

您有一份文件待查收!即刻点击链接获取文件:https://c-t.work/s/5bd31e86070749 或进入 cowtransfer.com 获取,在首页输入取件码:przycx(24小时内有效)

所以,直接暴露我没玩过暗黑3。。。

我大概明白你的意思了。。。这个应该就是个“走迷宫”问题,不过有比较明确的约束条件,比如“每次选择组合一定要包含最大值对应选项”,基本递归就能解决。。。

不过我最烦写递归。。。就用了约束条件+随机撞库,我自己尝试的基本能“撞”出来。。。你要有Matlab可以发你代码。。。

其实用编程语言更容易实现一些,比如python或者vba