求助求助大家!!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了,单单分开都不行,我实在不太理解这个输入输出的原理
如果有大佬能看看,并且解释一下的话,我真的感激不尽!!!祝大家万事顺意!!!
本人真的很想搞懂是为什么!!!感恩感恩!!!