【JavaScript】7-37 整数分解为若干项之和 (20 分)
题目:
将一个正整数N分解成几个正整数相加,可以有多种分解方法,例如7=6+1,7=5+2,7=5+1+1,…。编程求出正整数N的所有整数分解式子。
输入格式:
每个输入包含一个测试用例,即正整数N (0<N≤30)。
输出格式:
按递增顺序输出N的所有整数分解式子。递增顺序是指:对于两个分解序列N1={,}和N2={,},若存在i使得,,但是ni+1<mi+1,则N1序列必定在N2序列之前输出。每个式子由小到大相加,式子间用分号隔开,且每输出4个式子后换行。
输入样例:
7 |
输出样例:
|
JavaScript代码:
1 const { parse } = require('path') 2 var readline = require('readline') 3 4 const rl = readline.createInterface({ 5 input: process.stdin, 6 output: process.stdout 7 }) 8 9 var resArr = [] 10 11 rl.on('line', function(line) { 12 var n = parseInt(line) 13 fun(n, 1, [], n) 14 print(n) 15 }) 16 17 function fun(x, b, arr, n) { 18 if (x <= 0) { 19 resArr.push(convert(n, arr)) 20 return 21 } 22 23 for (let i = b; i <= x; i++) { 24 arr.push(i) 25 fun(x - i, i, arr, n) 26 arr.pop() 27 } 28 } 29 30 function convert(n, arr) { 31 let s = '' + n + '=' + arr[0] 32 for (let i = 1; i < arr.length; i++) { 33 s += '+' + arr[i] 34 } 35 return s 36 } 37 38 function print(n) { 39 let res = '' 40 for (let i = 0; i < resArr.length; i++) { 41 res += resArr[i] 42 if (i == resArr.length - 1) 43 break 44 if (i % 4 == 3) 45 res += '\n' 46 else 47 res += ';' 48 } 49 console.log(res) 50 }