用最大值均匀地除以整数

时间:2016-10-13 20:34:05

标签: algorithm math integer-partition

我需要以下算法:

  • 我获得了指定的目标总和 n 和指定的限制 m 。这些都是正整数。
  • 我想找到目标总和 n 的整数分区,该分区的目标数量尽可能少。
  • 每个加数必须小于或等于限制 m
  • 在上述限制范围内,加数应尽可能接近;也就是说,我希望 n 尽可能均匀地进行分区。

因此,例如,如果目标总和 n = 80并且每个summand必须最多 m = 30,那么我至少需要三个加数,并且最平均的分区是 26 + 27 + 27

我该如何计算?

2 个答案:

答案 0 :(得分:4)

首先,使用整数除法得到具有以下公式的数组大小:

size = (variable + maximum - 1) / maximum

接下来,使用以下公式填充数组:

extra = variable % size;
value = variable / size;
for each array value, set to value + 1 as long as there's extra; 
    value when the extra goes to zero.

答案 1 :(得分:0)

只是一个QnD算法和代码......未经测试。

 double n=107;
    double max = 22;
    int d = (int) Math.ceil(n/max);
    int[] result = new int[d];
    int res=0, i=0,iter=0;
    while(res!=n){
        iter= (int) Math.ceil(n/d);
        while(iter+res>n) iter--;
        res+=iter;
        result[i] = iter;
        System.out.println("i: " + i + " iter: " + iter + " sum: " +res);
        i++;
    }