已知40个数 85 114 120 60 57 100 120 150 240 35 85 70 152 110 124 120 66 67 85 88 123 105 169 186 250 98 85 75 136 85 154 69 120 260 144 172 86 92 116 113  如何分配成6组 每组和差不多 越近越好 每组个数6-7吧
每次从中提取6个不同数,使其和趋近于782.6,保存  然后每次从中提取7个不同数使其和趋近于782.6保存下来 从保存的不同数组里选取不重复的能组成原数组的几个数组 为最终答案
同学说用Dancing Links算法  不是学计算机的 不太懂 求大神给个程序步骤 最好能复制粘贴就好  论文要用  还要计算后的答案  谢谢算法计算机

解决方案 »

  1.   

    我的第一种思路是排序,
    排成一个从小到大的顺序,
    然后每6个一组,最后一组4个数。编号a-g,数组下标从1开始。0号位不赋值。
    其中g组只有4个数。
    然后保证每组的下标之和尽量相等,
    总下标之和为136,则每组下标之和尽量为23或22即可。
    例如一个组可以取a[1]+b[2]+c[3]+d[4]+e[5]|f[6]+g[2],下标之和为23
    这样的话计算量小,但是误差大。如果用楼主的方法的话,那么就用递归了,不过那样计算量太大了。
      

  2.   

    public class Test {
    public static void main(String[] args) {

    getResult(10);

    }

    public static void getResult(int result)
    {
    int[] arr=new int[]{0, 2, 3, 1, 4, 10, 23, 7, 8, 9, 6, 3};

    for (int i = 0; i < arr.length; i++) {
    int startItem=arr[i];

    for (int j = 0; j <arr.length; j++) {
    if(i==j)
    continue;
    int endItem=arr[j];

    if((startItem+endItem)==result)
    System.out.println(startItem+"+"+endItem+"="+result);

    }

    }
    }
    }这是之前找到的如何在一个数组中求出任意几个数的和等于给定数
    如在数组{0, 2, 3, 1, 4, 10, 23, 7, 8, 9, 6, 3}中求出和为10组合  2个组和  我想改为6个数组合  切和大于700小于800  不知道有参考意义么 不会读代码 只是论文需要而已