日期:2014-05-20  浏览次数:20673 次

求一随机算法
有一组数,共十个:1,2,...   10
要 "随机 "地分成两组,每组5个
并且两组数和之比在一区间内,比如(0.5,1.5)
比如一组为1,3,5,7,9,另一组为2,4,6,8,10
则两组数和之比是25/30=5/6

问如何 "随机 "地分成两组?


------解决方案--------------------
先用Random类,产生5个爱1-5之间的随机数,在用一个数组来存放10个数字,把数组中没有前五个数的取出来就把他们随机分组了撒。在用循环来使上面的满足他们的比直在你要的区间里撒。
------解决方案--------------------
这个像洗排一样,对十个元素的数组,产生0~9的随机下标x,循环几次,随便选个十次吧,每次交换a[x]与a[9-x]。随机混排后,取前5个元素之和与后5个元素之和相除就行了,如果比值在不属于要求的区间内,再进行一次混排,求比值,直到符合条件为止。
------解决方案--------------------
首先是数学问题
不能是两组数的比在(0.5,1.5)
应该是(0.5,2)

其次应该是逻辑问题
你这种算法很不好.(相当不好!)如果无限随即都不行怎么办?

建议穷举所有可能,然后随即挑一个...
------解决方案--------------------
1: 把10个数放 到数组里
2: 生成随机数,范围0~9,取整;
3: 临时下标=生成的随即数
4: 按临时下标从数组取数字
5: 如果该数字是0,临时下标++,临时下标除10取余,回到4
6: 如果该数字不是0,表示成功获得,把数字保存到另一个数组A,同时把原数组里该位置置0
7: 重复5次
8: 遍历一遍原数组,把非零的数字保存到数组B

A B就是随机分出的数组
------解决方案--------------------
一付排里有四张“草花5”,怎么可能
------解决方案--------------------
jihanzhong(逍遥)的方法 不错 对于100个数随机,只需要把十位数 和个位数嵌套循环一下就可以了,LZ参考一下
------解决方案--------------------
先随机分成两组,如果比值不在区间内(由于第一组数偏大),则在第一组中 "任 "选一个较大的数与第二组中 "任 "一个较小的数交换,如果还不行,再换

问题:以上算法会使比值落在区间边界附近的可能性偏大

如何改进?
========================================================

1。1 到 k 的数,和为 sum,分成两组,它的比率在 (d1, d2) 之间,就可以获得它们每组和的最大值和最小值。

  min = (int) (sum / ((1 + d1) / d1));
  max = (int) (sum / ((1 + d2) / d2));

2。按照楼主所说的,先进行随机分组,求出其中一组的和,或它的和在 (min, max) 之间,就OK 。否则,在 (min, max) 之间随机抽取一个数,得出差值,再与和小的一组小的最小值相加,再到另一组中寻找该数(为方便寻找可以限制正负范围),与那组中的最小值进行交换,若没有找到,继续在 (min, max) 之间随机抽取,重复上述过程。

------解决方案--------------------
如果只要一组 那穷举直到满足条件为止嘛