思路:例如44321这个数,在数组a[]中有1 2 3 4 4。如果这个数是神奇数,
那么数组中的所有数相加后得sum,sum%2一定为0。然后我们要确定44321是否 可以分为符合题意的两组,这里用到了递归。
const readline = require("readline") const rl = readline.createInterface({ input: process.stdin, output: process.stdout }) rl.on("line", function (n) { let arr = n.split(" ") let l = Number(arr[0]), r = Number(arr[1]) let count = 0 for (let i = l; i <= r; i++) { if (chartAt(i)) { count++ } } console.log(count) }) function chartAt(num) { let res = num let arr = [] let index = 0 let sum = 0 while (num > 0) { let val = num % 10 arr[index++] = val num = parseInt(num / 10) sum += val } if (sum % 2 === 1) { return false } return isMerge(arr, index, sum / 2) } function isMerge(arr, n, sum) { if (sum === 0) return true if (sum < 0) return false let state = false for (let i = 0; i < n; i++) { state = isMerge(arr.slice(i + 1), n - 1 - i, sum - arr[i]) if (state) break } return state } rl.on("close", function () { process.exit() })