将整数除以最大值
Divide an integer evenly with a maximum
我需要以下算法:
- 我得到了一个指定的目标总和 n,以及一个指定的限制 m。这些都是正整数。
- 我想找到目标总和 n 的整数分区,它的被加数尽可能少。
- 每个被加数必须小于或等于限制 m。
- 在上述限制条件下,被加数应尽可能靠近;也就是说,我希望 n 尽可能均匀地划分。
因此,例如,如果目标总和为 n = 80 并且每个被加数必须最多为 m = 30,则我至少需要三个加数,最偶数的分区是26 + 27 + 27.
我该如何计算?
首先,您使用以下整数除法公式得到数组的大小:
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.
只是一个 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++;
}
我需要以下算法:
- 我得到了一个指定的目标总和 n,以及一个指定的限制 m。这些都是正整数。
- 我想找到目标总和 n 的整数分区,它的被加数尽可能少。
- 每个被加数必须小于或等于限制 m。
- 在上述限制条件下,被加数应尽可能靠近;也就是说,我希望 n 尽可能均匀地划分。
因此,例如,如果目标总和为 n = 80 并且每个被加数必须最多为 m = 30,则我至少需要三个加数,最偶数的分区是26 + 27 + 27.
我该如何计算?
首先,您使用以下整数除法公式得到数组的大小:
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.
只是一个 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++;
}