gpt4 book ai didi

javascript - 检查一个数的可整性的基本练习

转载 作者:行者123 更新时间:2023-12-04 07:30:06 25 4
gpt4 key购买 nike

我被这个练习卡住了。我不明白为什么他们需要有第一个条件。我可以忽略那部分吗?
练习来自 https://www.w3resource.com/javascript-exercises/javascript-basic-exercise-46.php :

Write a JavaScript program to check two given non-negative integers that whether one of the number (not both) is multiple of 7 or 11.



function valCheck(a, b) {
if (!((a % 7 == 0 || a % 11 == 0) && (b % 7 == 0 || b % 11 == 0))) {
return ((a % 7 == 0 || a % 11 == 0) || (b % 7 == 0 || b % 11 == 0));
} else
return false;
}

console.log(valCheck(14, 21));
console.log(valCheck(14, 20));
console.log(valCheck(16, 20));

最佳答案

TL;DR – 不,这不是多余的!

Write a JavaScript program to check whether exactly one of the two given non-negative integer numbers is a multiple of 7 or 11.


为了解释为什么它不是多余的,让我们分解这个解决方案功能。
function valCheck(a, b) {
if (!((a % 7 == 0 || a % 11 == 0) && (b % 7 == 0 || b % 11 == 0))) {
return ((a % 7 == 0 || a % 11 == 0) || (b % 7 == 0 || b % 11 == 0));
} else
return false;
}
第一个条件
第一个条件是 !((a % 7 == 0 || a % 11 == 0) && (b % 7 == 0 || b % 11 == 0)) . x % n == 0表达式正在检查是否给定 x可以被 7 或 11 的(倍数)整除,但表达式写得过于冗长,有点难以理解。
使用 De Morgan's law ,我们可以重写它:
!((a % 7 == 0 || a % 11 == 0) && (b % 7 == 0 || b % 11 == 0))



!(a % 7 == 0 || a % 11 == 0) || !(b % 7 == 0 || b % 11 == 0)



(a % 7 != 0 && a % 11 != 0) || (b % 7 != 0 && b % 11 != 0)
现在,我们可以看出这个条件正在检查 a 的情况。或 b不能被 7 或 11 整除。
当这个条件为真时,我们返回第二个条件的结果。如果它是假的,那么我们知道输入不是 7 或 11 的倍数,所以我们直接返回假。
第二个条件
第二个条件是:
(a % 7 == 0 || a % 11 == 0) || (b % 7 == 0 || b % 11 == 0)
这个比第一个更不透明,并检查 4 个子条件中的任何一个是否为真(括号在这里无关紧要,因为它们都是“或” || 运算符)。
由于我们已经从第一个条件中知道至少有一个输入不是 7 或 11 的倍数,所以我们现在可以简单地返回是否至少有输入是。换句话说,如果我们知道第二个条件为真,那么我们可以确定其中一个数字是 7 或 11 的倍数。
条件是否冗余?
所以回答你的问题, 不,第一个条件不是多余的 ,因为它会检查是否至少有一个输入不是倍数或 7 或 11。我们需要两个条件表达式来正确检查输入之一是否是正确的倍数或 7 或 11。
如果“but not both”子句不存在,那么我们可以只使用第二个条件表达式,但既然是这样,我们就需要两条信息。

需要注意的是,我说我们需要两个表达式时撒了一点谎,因为确实可以用一个表达式来解决这个练习!

function valCheck(a, b) {
return (a % 7 == 0 || a % 11 == 0) != (b % 7 == 0 || b % 11 == 0);
}

console.log(valCheck(14, 21)); // false
console.log(valCheck(14, 20)); // true
console.log(valCheck(16, 20)); // false

我会把它留给读者去弄清楚为什么会这样!

关于javascript - 检查一个数的可整性的基本练习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67994114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com