首页 > 试题广场 >

求和

[编程题]求和
  • 热度指数:21129 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来

输入描述:
每个测试输入包含2个整数,n和m


输出描述:
按每个组合的字典序排列输出,每行输出一种组合
示例1

输入

5 5

输出

1 4<br/>2 3<br/>5
const readline = require('readline')

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
})
let n = 0
let m = 0
rl.on('line', str=>{
    str.split(' ').forEach((item, i)=>{
        if(i===0){
            n = parseInt(item)
        }else if(i===1){
            m = parseInt(item)
        }
    })
    help(n, m, [], 1)
    if(n>=m){
        console.log(m)
    }
})
function help(n, m, addArr, start){
    let midNum = m/2
    if(midNum>=n || midNum<1)
        return 
    for(let i=start; i<midNum; i++){
        if(m-i<=n){
            //打印
            console.log([...addArr, i, m-i].join(' '))
        }
        //递归
        addArr.push(i)
        help(n, m-i, addArr, i+1)
        addArr.pop()
    }
}
发表于 2021-04-11 09:38:18 回复(0)
let l=readline().split(' ')
let n=parseInt(l[0]),m=parseInt(l[1])
let res=new Array()
let min =Math.min(n,m)
let sum=0
function f(step){
    if(step==min+1){
        res.forEach((item)=>{
            sum+=item
        })
        if(sum==m)
            console.log(res.join(' '))
        sum=0
        return
    }
        res.push(step)
        f(step+1)
        res.pop()
        f(step+1)
}

let hh = f(1)

发表于 2020-03-04 12:21:55 回复(0)
var readline = require('readline')

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
})

rl.on('line', function(line) {
    var tokens = line.split(' ')
    var sumsArr = []
    findSumArr(parseInt(tokens[0]), parseInt(tokens[1]), [], sumsArr)
    sumsArr.sort().forEach(function(item) {
      console.log(item);
    })
})

 function findSumArr(n, m, sumArr, sumsArr) {
   if(m < 1) {//m===0
     sumsArr.push(sumArr.sort().join(' '))
     return
   }
   if(n < 1) {
     return
   }
   // 如果n大于m,则将n赋值为m(大于m的值无用
   if(n > m) {
     n = m
   }

   // 注意:这里不能直接使用 tmpArr=sumArr
   var tmpArr = []
   sumArr.forEach(function(item) {
     tmpArr.push(item)
   })
   // 1. 不将n放入数组
   findSumArr(n-1, m, sumArr, sumsArr)
   // 2. 将n放入数组
   tmpArr.push(n)
   findSumArr(n-1, m-n, tmpArr, sumsArr)
 }
编辑于 2017-03-14 12:28:59 回复(3)