我试图让我的代码购买最大数量的手机和配件。一部手机的价格是99.99美元,而一部配件的价格是9.99美元。我的银行账户上有1000个。如何使我的代码购买最大金额?我的代码目前购买9部手机和9部配件。它应该买9部手机和10个配件,而不是9部。
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);
发布于 2016-11-21 18:11:45
这句话是错的:
while (((total + PHONE) || (total + ACCESSORY)) < balance) {这并不能测试这两种和是否小于balance。(total + PHONE) || (total + ACCESSORY)的值始终是total + PHONE,除非是0,否则就是total + ACCESSORY。由于total + PHONE从来不是0,这实际上相当于:
while ((total + PHONE) < balance) {而且它从来没有测试是否有可用的余额只是一个附件。进行此测试的正确方法是:
while ((total + PHONE) < balance || (total + ACCESSORY) < balance) {您还应该使用<=而不是<,以便能够准确地使用所有的钱。
但是在循环中,您仍然将PHONE添加到total中,即使只剩下足够的余额作为附件。你得先检查一下。
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);
一种更简单的方法是用算术代替循环。除以手机+配件的成本,找出你能负担得起的配对数量。然后找出你还能买多少配件,然后再用剩下的东西买。
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);
发布于 2016-11-21 18:11:55
给你:
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部备用手机。
发布于 2016-11-21 18:22:17
在循环条件下,您只需检查是否有剩余的钱作为附件。如果你不这样做,就没有必要处决身体了。
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。
https://stackoverflow.com/questions/40726499
复制相似问题