呵呵,
有一个简单的方法可否?
如果K=3
就把最后的结果除以3,如果K=N,就把最后的结果除以N???
(我不懂算法,行外人,有不对的地方请指出)
呵呵,
有一个简单的方法可否?
如果K=3
就把最后的结果除以3,如果K=N,就把最后的结果除以N???
(我不懂算法,行外人,有不对的地方请指出)
我想的是三个for的嵌套
嵌套中判断第1.2.3个数是否相等
我只是这么想的,还没有付出实际行动
我在xp下不能编
我想的是三个for的嵌套
嵌套中判断第1.2.3个数是否相等
我只是这么想的,还没有付出实际行动
我在xp下不能编
你在XP下不能编?应该不会吧,你用的是什么编译器?
这个想法 神vLinux飘飘已经提到过了,但这只能解决分3份的问题,要是我让你分4份或
更多呢? 再想想。
以N=100,K=5为例:
一, 每份至少为1,所以N-K=95只有这个数是可改变的,即,
1,1,1,1,1 这是必须且可予先分配的
二,那么有,
1+95,1,1,1,1
1+94,1+1,1,1,1
1+93,1+2,1,1,1
1+93,1+1,1+1,1
1+92,1+3,1,1,1
1+92,1+2,1+1,1,1
1+92,1+1,1+1,1+1,1(这个注意,后一个+的数字 不能大过前一个,避免重复的关键,即1+92,1+1,1+2,1,1是重复的)
。。。。。。。
到此,两个字--------递规
不是
我是在xp下装不上vc++6.0
但在2000下就可以
神奇
不是
我是在xp下装不上vc++6.0
但在2000下就可以
神奇
同志,建议你去找个java虚拟机来安装!
这个是因为微软被告垄断罪,结果在XP没有捆绑java虚拟机,你随便找个软件网下个来装就是了
to knocker:
谢谢,想了我好久!我一开始就想到用递归,但是不知道怎么实现, 而后来神朋友的算法我也想了,太局限,避免重复的关键我错, 我开始是想把得到的所有可能拿出来排序然后比较,这样虽然可以实现重复比较, 但实在笨,想来想去,只有递归可以不用再比较。
具体怎么实现呢?是先动态申请数组,然后呢?递归用的函数怎么实现?
PS: 大哥你的个人主页怎么上不了?!
[此贴子已经被作者于2004-07-24 21:22:57编辑过]
事实上我还是想到方法了:
就以521三个数组成的8为例,有以下几个可能:125,152, 215,251,512,521。
一共六种,按题意,这六种方法是不能重复的,只能算是一种分法,
实际上,这就是一个排列与组合的问题:
当K=3时,有六种不同的组合方法,
当K=4时,则有24种组合的方法,K=5呢??
关于组合的公式我想就不用我多说了吧,
嘻嘻,所以说,最后的算法还是不难的。
然后就是把穷举出来的结果再除以这个组合的个数就行了。*(希望没错)
knocker的算法和我想的差不多——排序,递归
从第一个数开始搜索,保证后面搜到的数大于等于前面的就可以了
(递归时可以适当剪枝,确定一个比较好的搜索范围)
knocker真的好厉害,这个算法应该算最好的了。
有兴趣的朋友可以按这个算法编一个程序,贴上来,大家交流
我还是比较同意 2004 的方法(我也是这样做的),但是从电脑程序的角度出发,knocker 的做法是很理想。
但是用排列组合公式好象就缺少了点编程的乐趣,完全变成了一道高中数学计算题。