题目:
将一个正整数N分解成几个正整数相加,可以有多种分解方法,例如7=6+1,7=5+2,7=5+1+1,…。编程求出正整数N的所有整数分解式子。
输入格式:
每个输入包含一个测试用例,即正整数N (0
输出格式:
按递增顺序输出N的所有整数分解式子。递增顺序是指:对于两个分解序列N1={,}和N2={,},若存在i使得,,但是ni+1
输入样例:
7
输出样例:
7=1+1+1+1+1+1+1;7=1+1+1+1+1+2;7=1+1+1+1+3;7=1+1+1+2+2
7=1+1+1+4;7=1+1+2+3;7=1+1+5;7=1+2+2+2
7=1+2+4;7=1+3+3;7=1+6;7=2+2+3
7=2+5;7=3+4;7=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 }
标签:正整数,JavaScript,样例,若干项,分解,var,20,line,readline
来源: https://www.cnblogs.com/moonskies/p/14467277.html