不需要递归
// 有效代码 // 先处理 5 和 3,再奇偶性优先、绝对值大优先、向原点折叠 const exec = (line: string) => { if (0 === (inputCount = (inputCount + 1) % 2)) { const snums = [] as number[]; const dnums = [] as number[]; // 2. 累计,5 的倍数为 +,则 3 的倍数为 -,其它数字根据奇偶分成 2 组并转为绝对值保存 let sum = line .split(" ") .filter(s => s !== "") .map(num => parseInt(num)) .reduce((sum, num) => { if (num % 5 === 0) return sum + num; else if (num % 3 === 0) return sum - num; else (num % 2 === 1 ? snums : dnums).push(Math.max(num, -num)); return sum; }, 0); // 3. 按照绝对值从大到小排列 snums.sort((a, b) => b - a); dnums.sort((a, b) => b - a); // 4. 奇偶性优先原则,从大到小将 sum 向 0 折叠 for (let i = 0, len = snums.length + dnums.length; i < len; i++) { const val = (snums.length > 0 && (sum % 2 === 1 || dnums.length === 0) ? snums.shift() : dnums.shift()) || 0; sum = sum + (sum > 0 ? -val : val); } // 折叠结果为 0 表示成立 return sum === 0; } else return undefined; // 跳过奇数次的输入 }; let inputCount = 0; // ACM 模式八股文代码别看 const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.on("line", (line: string) => (res => (res !== undefined ? outputs.push(`${res}`) : null))(exec(line))); rl.on("close", () => outputs.forEach(res => console.log(res))); const outputs: string[] = [];