第一节:坑爹的奥数
emmm我想说这两个解法都挺长的…不想敲啊啊啊啊啊…
鸽了鸽了~有时间我再补上吧(九层for循环,干得漂亮 丧心病狂)
第二节:炸弹人
这个游戏可太经典了,我还记得小时候玩着插卡游戏机,把红色的过关门,用炸弹炸了,然后会有很多怪又新生成,可以吃定时炸弹来刷分~
哎扯远了,来看看这个题吧~
书上写的还是蛮易懂的~
// 地图是13*13
let mapStr = `
#############
#GG.GGG#GGG.#
###.#G#G#G#G#
#.......#..G#
#G#.###.#G#G#
#GG.GGG.#.GG#
#G#.#G#.#.###
##G...G.....#
#G#.#G###.#G#
#...G#GGG.GG#
#G#.#G#G#.#G#
#GG.GGG#G.GG#
#############`;
// 处理字符串
let a = [];
let regExp = /\n+/g;
mapStr = mapStr.replace(regExp, '');
console.log(mapStr);
// 处理地图数组,m表示多少列,n表示多少行
let m = 13, n = 13;
for (let i = 0; i < m; i++) {
let eachRow = [];
for (let j = 0; j < n; j++) {
eachRow.push(mapStr[i * 13 + j]);
}
a.push(eachRow)
}
console.log(a);
let sum, x, y;
let map = 0, p, q;
for (let i = 0; i <= n - 1; i++) {
for (let j = 0; j <= m - 1; j++) {
// 先找平地
if (a[i][j] === '.') {
sum = 0;
x = i, y = j;
while (a[x][y] !== '#') {
if (a[x][y] === 'G') {
sum++;
}
// 向上查找
x--;
}
x = i, y = j;
while (a[x][y] !== '#') {
if (a[x][y] === 'G') {
sum++;
}
// 向下查找
x++;
}
x = i, y = j;
while (a[x][y] !== '#') {
if (a[x][y] === 'G') {
sum++;
}
// 向左查找
y--;
}
x = i, y = j;
while (a[x][y] !== '#') {
if (a[x][y] === 'G') {
sum++;
}
// 向右查找
y++;
}
if (sum > map) {
map = sum;
p = i;
q = j;
}
}
}
}
console.log(`将炸弹放置在${p},${q},最多可以消灭${map}个敌人`);
第三节:火柴棍的个数
有点数学题的味道了~
function fun(x) {
let num = 0;
let f = [6, 2, 5, 5, 4, 5, 6, 3, 7, 6];
while (parseInt(x / 10) != 0) {
num += f[x % 10];
x = parseInt(x / 10);
}
num += f[x];
return num;
}
let sum = 0;
let m = 18; // 火柴棍的个数
for (let i = 0; i <= 11111; i++) {
for (let j = 0; j <= 11111; j++) {
let k = i + j;
if (fun(i) + fun(j) + fun(k) === m - 4) {
console.log(i, j, k);
sum++;
}
}
}