re-us 发表于 2008-12-10 12:33

一个排列与组合问题

现在有3个数:A,B,C。打算实现的功能是:这三个数的任意组合的加减乘除,一共有多少种?
就是用这三个数字来构造另外一个数字,符号相反也认为是不同的

我的想法是:首先可以分成三类AB/C,AC/B,AB/C
对于每一类:以AB/C为例子
A+B
A-B
A*B
A/B
B-A
B/A
共有6个因子,这6个因子再和C运算

以A+B为例
C+(A+B)
C-(A+B)
C*(A+B)
C/(A+B)
(A+B)-C
(A+B)/C
也是6个因子

所以对于每一类我们有36个组合

对于三个类别有36*3个类别

这样要用3个循环来实现,很是麻烦。
1. 有没有更简单的方法?
2.我的算法有漏掉什么组合吗?
谢谢

[ 本帖最后由 re-us 于 2008-12-10 21:46 编辑 ]

wwbeyondww 发表于 2008-12-10 18:57

有重复
比如C+(A+B)和A+(B+C)和B+(A+C)是一样的
还有,为啥乘8不是乘3

[ 本帖最后由 ChaChing 于 2010-2-3 15:15 编辑 ]

re-us 发表于 2008-12-10 21:47

回复 沙发 wwbeyondww 的帖子

谢谢指导,确实有重复
另外,就是应该乘3,打错了

继续请教大家,有没有更好的算法。
还好,这是3个数字构造一个数字,如果是更多呢?

谢谢

[ 本帖最后由 ChaChing 于 2010-2-3 15:16 编辑 ]

ChaChing 发表于 2008-12-11 07:45

楼主方便说明要实现功能的应用是什麽? 为何有此需求!?

wwbeyondww 发表于 2008-12-11 10:03

估计是要编个算24的小程序,哈哈

我觉得楼主的思路应该也不复杂吧,
写个函数,f(a,b),输出a和b的六种计算结果,
3个也很简单了,f(f(a,b),c);f(f(a,c),b);f(f(b,c),a)就好了;
4个麻烦点,除了f(f(f(a,b),c),d);f(f(f(a,b),d),c)这中类型外,还要考虑f(f(a,b),f(c,d))这一类情况。不过全都列举下写个4张牌的24点倒是没问题。
5个以上列举不是好办法,我的话只能加入n多冗余重复的计算来考虑了

[ 本帖最后由 ChaChing 于 2010-2-3 15:18 编辑 ]

re-us 发表于 2008-12-13 06:37

比如用北京的温度,气压,和降雨,构造一个新的变量,所以想求出所有的组合类型

非常感谢! "不过全都列举下写个4张牌的24点倒是没问题" 不是很明白? 再次感谢

现在要考虑8个变量,通过加减乘除组合新的变量。请大家多给意见。谢谢

[ 本帖最后由 ChaChing 于 2010-2-3 15:31 编辑 ]
页: [1]
查看完整版本: 一个排列与组合问题