【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

 

 

输出样例:

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 }

 

posted @ 2021-03-02 09:28  moonskies  阅读(401)  评论(0编辑  收藏  举报