求助求助大家!!360笔试 魔塔闯关编程题
我第一次只用read_line()通过率是91%
第二次只用gets(10)通过率是9%
然后我突发奇想一起用然后就ac了
但是本人新手一个,实在不理解内在原理,有没有大佬可以帮忙解释一下!我将感激不尽!!好人一生平安!!!
题目如下:(题目我借用了牛客某位大佬Serendipity-zsh的,因为我没截图哭哭)
/** * 魔塔闯关 * 魔塔是一款时尚经典小游戏,我们将魔塔简化后的规则描述如下: * 魔塔有n关,而你可以自由选择前往攻略哪一关,每一关只能获得一次分数。 * 第i关攻略完成后,你将会获得ai的分数。 * 某些关有一个特殊的宝物,你只能在攻略完这一关的时候使用这个宝物( * 也可以不使用,额外的宝物并不能留到其他关卡使用), * 这个宝物将使得这一关不得分,但是将你现有的总得分乘以2作为新的得分。 * 你现在知道了所有关卡的通关方法,也知道了每一关的得分和是否有宝物,你现在想知道,怎么选择攻略的顺序和使用宝物的方法才能让自己的得分最大化? * 输入描述 * 输入第一行包含一个整数n * * 接下来n行,每行两个整数ai,bi。ai表示第i关的分数,若bi为1,则第i关有宝物。 * * 输出描述 * 输出包含一个数,即能获得的最大分数 */样例输入:(我凭记忆写的了,记不太清了)
5 1 1 2 1 5 1 1 0 3 0输出:
36解释:先过第五关,再过第四关,第三关继续加,第二关用宝物*2,第一关也用宝物*2 ---- 36
以下是我的代码:
// 魔塔闯关
var MTCGuan = function (n, arr) {
let arr1 = []
let count = 0
for (let i = 0; i < n; i++) {
// 判断(先把0弄出来)
if (arr[i][1] == 0) {
count += arr[i][0]
} else {
// 放入新数组
arr1.push(arr[i][0])
}
}
// 对数组排序(降序)
arr1.sort((a, b) => b - a)
// 遍历
for (let i = 0; i < arr1.length; i++) {
// 用宝物
if (count * 2 >= count + arr1[i]) {
count = count * 2
} else {
count = count + arr1[i]
}
}
return count
}
// 输入
let num = readInt()
let lines
let arr = []
while (lines = gets(10).trim()) {
arr.push(lines.split(" "))
}
while (lines = read_line()) {
arr.push(lines.split(" "))
}
// 二维数组
console.log(MTCGuan(num, arr)) 我好奇的就是为什么两个输入就ac了,单单分开都不行,我实在不太理解这个输入输出的原理 如果有大佬能看看,并且解释一下的话,我真的感激不尽!!!祝大家万事顺意!!!
本人真的很想搞懂是为什么!!!感恩感恩!!!
深信服公司福利 832人发布

