我有一个逻辑上的问题。
我有一个起点A和终点B。我有不同大小的积木(42,21)英寸和一个可变大小的填充盒(可以从7-26英寸延伸)。我需要填充空间,以便最大尺寸的块是合适的,然后剩余的空间被填充框填充。
例如a)如果间隙是50英寸,我将放一个42英寸的积木和一个填充盒(42+ 8*)
b)如果间隙是43英寸,我不能放42英寸的积木,因为剩余的间隙是1英寸,我没有任何东西可以放进去。所以我将放置一个21英寸的块,填充块将占用22英寸的其余部分,因为它可以拉伸到26英寸。( 21 + 22*)
c)像48这样的例外很少-它不适合上面的规则集。但我们可以忽略这些,因为差距很少是48或27。如果是这样,就会留下一个空白,这是可以接受的。
发布于 2020-11-30 23:00:45
假设只能有一个填充框,这应该可以做到这一点。
function fill_space(space) {
const small_block = 21;
const big_block = 2 * small_block;
const min_filler = 7;
const max_filler = 26;
if (space % small_block == 0) {
const num_big = Math.trunc(space / big_block);
const num_small = (space - num_big * big_block) / small_block;
return { num_big: num_big, num_small: num_small, filler: 0 };
}
if (space < min_filler) {
return { num_big: 0, num_small: 0, filler: 0 };
}
const max_block_space = space - min_filler;
const num_big = Math.trunc(max_block_space / big_block);
const max_small_space = max_block_space - num_big * big_block;
const num_small = Math.trunc(max_small_space / small_block);
const filler = Math.min(
min_filler + max_small_space - num_small * small_block,
max_filler
);
return { num_big: num_big, num_small: num_small, filler: filler };
}
console.log(fill_space(0));
console.log(fill_space(6));
console.log(fill_space(21));
console.log(fill_space(42));
console.log(fill_space(48));
console.log(fill_space(50));
console.log(fill_space(63));https://stackoverflow.com/questions/65069218
复制相似问题