为了账号安全,请及时绑定邮箱和手机立即绑定

用不同大小的盒子填充空白空间的逻辑

用不同大小的盒子填充空白空间的逻辑

函数式编程 2023-09-21 10:10:52
我有一个逻辑问题。我有一个起点 A 和终点 B。我有不同尺寸的块(42、21)英寸和一个可变尺寸的填充盒(可以从 7-26 英寸延伸)。我需要填充空间,以便适合最大尺寸的块,然后用填充框填充剩余空间。例如 a) 如果间隙是 50 英寸,我将放置一个 42 英寸块和一个填充盒 ( 42 + 8*)b) 如果间隙是 43 英寸,我不能放置 42 英寸块,因为剩余间隙是 1 英寸,我没有东西可以放进去。所以我会放一个 21 英寸的块,填充块将占据 22 英寸的其余部分,因为它可以拉伸到 26 英寸。( 21 + 22*)c) 很少有例外,例如 48 - 不适合上述规则集。但我们可以忽略这些,因为差距很少会是 48 或 27。如果是,它会留下一个差距,那没关系。
查看完整描述

1 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

假设只能有一个填充盒,这应该可以解决问题。


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));


查看完整回答
反对 回复 2023-09-21
  • 1 回答
  • 0 关注
  • 81 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信