计算要使用多少不同的物品

Calculating how many different items to use

本文关键字:多少 计算      更新时间:2023-09-26

用户输入他们需要的水量,我需要计算使用哪瓶水,是10l瓶还是20l瓶。所以如果他们要求67l,脚本会弹出3x20l和1x10l

我尝试了以下两种解决方案

    var resinAm = rsize*1.1*2.5
    var resTin = '';
        if(resinAm<10){
            resTin = 1;
        } else {
            resTin = resinAm/20;
            resTin = Math.ceil(resTin);
        }

    var resAm = resinAm;
    var resAm10 = (resAm/10)+0.001;
    var resAm20 = (resAm/20)*2;
    if(resAm10>resAm20){
        resTin10 = 1;
        resTin20 = Math.floor(resAm/20);
    } else {
        resTin20 = Math.ceil(resAm/20);
    }

我也尝试过使用模,但它总是以额外的20l瓶出来,70.5l出来为5x20l和1x10l

如何修复

查看代码:https://jsfiddle.net/a4k2cyoy/2/

var resAm = 70.5;
var resAm20 = parseInt(resAm / 20);
var resAm10 = 0;
if(resAm % 20 > 10) {
    resAm20++;
}
if(resAm % 20 <= 10 && resAm > 0) {
    resAm10++;
}
alert(resAm + " will go into " + resAm20 + " x 20 bottles and " + resAm10 + " x 10 bottles");

就这么简单

var value = 67;
var tenLBottles = Math.ceil(value % 20 /10);
var twentyLBottles = (value - value%20)/20

你可以这样做,用你想要的填充瓶子数组

var water = 67;
var bottles = [20, 10, 3]; // bottles in desc order
var currentBottleIndex = 0
while(water > 0 && currentBottleIndex < bottles.length) {
  console.log(Math.floor(water / bottles[currentBottleIndex]) + ' bottles of ' + bottles[currentBottleIndex])
  water = water % bottles[currentBottleIndex]
  currentBottleIndex ++;
}
console.log('rest water', water)

这是一道数学题,简单来说,你可以这样理解:

    var bottles=[20,10];
function choose_bottle(water) {
    var bottle1_num,bottle2_num;
    if(water<=10) {
        return "1*"+bottles[1];
    }
    else if(water>10&&water<=20) {
        return "1*"+bottles[0];
     }
    else {
        bottle1_num = Math.floor(water/bottles[0]);
        bottle2_num = Math.ceil((water -bottle1_num*bottles[0])/bottles[1]);
        return bottle1_num+"*"+bottles[0]+" "+bottle2_num+"*"+bottles[1];
    }
}

这应该可以完成工作:

var amount = 67;
var bottle20 = Math.floor(amount / 20);
var bottle10 = Math.ceil((amount - bottle20 * 20) / 10);