数值打印
console.log({}+{})
console.log([]+{})
console.log({}+[])
let obj = { a: 0 };
function test(obj) {
obj.a = 1;
console.log(obj)
obj = { a: 2 };
console.log("11",obj)
obj.a = 3;
console.log("233", obj)
}
test(obj);
console.log(obj);
let name = "the window";
function test() {
console.log(this.name);
}
let obj = {
name: "the object",
getName: function(fn) {
fn && fn();
console.log(this.name)
return function() {
return this.name;
};
}
};
console.log(obj.getName(test)())
var name = "the window";
function test() {
console.log(this.name);
}
let obj = {
name: "the object",
getName: function(fn) {
fn && fn();
console.log(this.name)
return function() {
return this.name;
};
}
};
console.log(obj.getName(test)())
console.log(1);
async function test() {
console.log(2);
await console.log(3);
console.log(4);
}
setTimeout(() => {
console.log(5);
}, 0);
test();
new Promise(resolve => {
console.log(6);
resolve();
}).then(() => {
console.log(7);
});
console.log(8);
window.isNan number.isnan区别
post put 区别
求两个数的最大公约数
个人感觉这种题目,没有多大意义,都是基本的数学,知道就是知道,不知道,根本想不出
1 使用暴力解法
export default (a, b) => {
if (a === b) return a;
const min = Math.min(a, b);
let max = 1;
for (let i = min; i >= 1; i--) {
if (a % i === 0 && b % i === 0) {
max = Math.max(max, i);
}
}
return max;
};
2 相减法
①先判断两个数的大小,如果两数相等,则这个数本身就 是就是它的最大公约数。
②如果不>b 相等,则用大数减去小数,然后用这个较小数与它们相减的结果相比较,如果相等,则这个差就是它们的最大公约数,而如果不相等,则继续执行②操作。
const gcd = (a, b) => {
if (a === b) return a;
let min = Math.min(a, b);
if (min === 0) {
return Math.max(a, b);
}
let temp;
if (a < b) {
temp = b - a;
} else {
temp = a - b;
}
return gcd(min, temp);
};
export default gcd;
①当两个数相等时,其中任意一个就是它们的最大公约数,因为它们的余数为0;
②当两个数不相等时,用较大数除以较小数,当余数不为0时,这时 使较小数作为被除数,余数作为除数,继续 ②的操作,直至余数为0,也就是这两个数相等时,其中任一数为最大公约数。
依然是上面的例子:18和12的最大公约数6 18 = 6 * a 12 = 6 * b 18/12—–商为1—–余数为6 = 6 *1—-可以看出余数也是最大公约数的倍数 12/6——-商为2—–余数为0———–所以得到6为最大公约数
const gcd = (a, b) => {
if (a === b) return a;
let min = Math.min(a, b);
let max = Math.max(a, b);
if (min === 0) {
return Math.max(a, b);
}
if (max % min === 0) return min;
let temp;
if (a < b) {
temp = b % a;
} else {
temp = a % b;
}
return gcd(min, temp);
};
export default gcd;
最小小黄鸡
有N个小黄鸡,每P个可以合成一个银色小黄鸡,每Q个可以合成一个金色小黄鸡 请问通过合理的合成,能让所有鸡的最小数量是多少? 1<P<Q
这题目很简单,主要是要确定不能使用贪心算法,因为比如当11只小黄鸡的时候,如果使用贪心算法,就是1只金色的小黄鸡,4只小黄鸡,这明显是不合理的,因为如果是2只银色的小黄鸡和一只小黄鸡明显比使用贪心算法的小
// 有N个小黄鸡,每P个可以合成一个银色小黄鸡,每Q个可以合成一个金色小黄鸡
// 请问通过合理的合成,能让所有鸡的最小数量是多少?
// 1<P<Q
export default (n, p, q) => {
let maxQnum = Math.ceil(n / q);
let minNum = Infinity;
for (let i = 0; i <= maxQnum; i++) {
let maxPnum = Math.ceil((n - i * q) / p);
for (let j = 0; j <= maxPnum; j++) {
let chickenNum = n - (i * q + j * p);
if (chickenNum >= 0) {
minNum = Math.min(minNum, i + j + chickenNum);
}
}
}
return minNum;
};