首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使循环购买最大金额?

如何使循环购买最大金额?
EN

Stack Overflow用户
提问于 2016-11-21 17:59:25
回答 3查看 55关注 0票数 1

我试图让我的代码购买最大数量的手机和配件。一部手机的价格是99.99美元,而一部配件的价格是9.99美元。我的银行账户上有1000个。如何使我的代码购买最大金额?我的代码目前购买9部手机和9部配件。它应该买9部手机和10个配件,而不是9部。

代码语言:javascript
复制
const ACCESSORY = 9.99;
const PHONE = 99.99;

var balance = 1000;
var total = 0;

var phones_total = 0;
var accessories_total = 0;

while (((total + PHONE) || (total + ACCESSORY)) < balance) {
  total = total + PHONE;
  phones_total = phones_total + 1;
    if ((total + ACCESSORY) < balance) {
      total = total + ACCESSORY;
      accessories_total = accessories_total + 1;
    }
}

console.log("total = " + total);
console.log("phones = " + phones_total);
console.log("accessories = " + accessories_total);

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-11-21 18:11:45

这句话是错的:

代码语言:javascript
复制
while (((total + PHONE) || (total + ACCESSORY)) < balance) {

这并不能测试这两种和是否小于balance(total + PHONE) || (total + ACCESSORY)的值始终是total + PHONE,除非是0,否则就是total + ACCESSORY。由于total + PHONE从来不是0,这实际上相当于:

代码语言:javascript
复制
while ((total + PHONE) < balance) {

而且它从来没有测试是否有可用的余额只是一个附件。进行此测试的正确方法是:

代码语言:javascript
复制
while ((total + PHONE) < balance || (total + ACCESSORY) < balance) {

您还应该使用<=而不是<,以便能够准确地使用所有的钱。

但是在循环中,您仍然将PHONE添加到total中,即使只剩下足够的余额作为附件。你得先检查一下。

代码语言:javascript
复制
const ACCESSORY = 9.99;
const PHONE = 99.99;

var balance = 1000;
var total = 0;

var phones_total = 0;
var accessories_total = 0;

while ((total + PHONE) <= balance || (total + ACCESSORY) <= balance) {
   if ((total + PHONE) <= balance) {
     total = total + PHONE;
     phones_total = phones_total + 1;
   }
   if ((total + ACCESSORY) <= balance) {
     total = total + ACCESSORY;
     accessories_total = accessories_total + 1;
   }
 }

console.log(phones_total, accessories_total);

一种更简单的方法是用算术代替循环。除以手机+配件的成本,找出你能负担得起的配对数量。然后找出你还能买多少配件,然后再用剩下的东西买。

代码语言:javascript
复制
const ACCESSORY = 9.99;
const PHONE = 99.99;

var balance = 1000;

var phones_total = Math.floor(balance/(PHONE + ACCESSORY));
var remainder = balance - phones_total*(PHONE+ACCESSORY)
var accessories_total = phones_total + Math.floor(remainder/ACCESSORY);

console.log(phones_total, accessories_total);

票数 2
EN

Stack Overflow用户

发布于 2016-11-21 18:11:55

给你:

代码语言:javascript
复制
const ACCESSORY = 9.99;
const PHONE = 99.99;

var balance = 1000;
var total = 0;

var phones_total = 0;
var accessories_total = 0;

while (((total + PHONE) < balance) || ((total + ACCESSORY) < balance)) {
    if((total + PHONE) < balance){
        total = total + PHONE;
        phones_total = phones_total + 1;
    }
    if ((total + ACCESSORY) < balance) {
        total = total + ACCESSORY;
        accessories_total = accessories_total + 1;
    }
}

console.log("total = " + total);
console.log("phones = " + phones_total);
console.log("accessories = " + accessories_total);

但有了这个平衡,你只能买9部手机和10部备用手机。

票数 1
EN

Stack Overflow用户

发布于 2016-11-21 18:22:17

在循环条件下,您只需检查是否有剩余的钱作为附件。如果你不这样做,就没有必要处决身体了。

代码语言:javascript
复制
while ((total + ACCESSORY) <= balance) {
    if ( (total + PHONE) <= balance) {
        ++ phones_total;
        total = (phones_total * PHONE) + (accessories_total * ACCESSORY);
    }

    if ( (total + ACCESSORY) <= balance) {
        ++ accessories_total;
        total = (phones_total * PHONE) + (accessories_total * ACCESSORY);
    }
}

在身体上,首先检查是否有钱买一部手机,如果是这样更新总数,然后看看你是否还有钱买一个配件。

使用浮点数,一次又一次地添加它们会导致更多的累积错误,而不是像上面那样简单地计算total

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40726499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档