• IT公司100题-21-输入n和m,和等于m


    问题描述:
    输入两个整数n 和m,从数列1,2,3,…,n 中随意取几个数, 使其和等于m,将所有可能的组合都打印出来。
     
    分析:
    利用递归的思路,对于1,2,3,…,n 中的任意一个数,要么选,要么不选。递归下去,直到其和等于m时,输出。
     

    解答:

     1 // 21.cc
     2 #include <iostream>
     3 #include <cstring>
     4 using namespace std;
     5 
     6 void print(int* aux, int n) {
     7     for (int i = 0; i < n; i++)
     8         if (aux[i])
     9             cout << i << " ";
    10     cout << endl;
    11 }
    12 
    13 void helper(int m, int cur, int* aux, int n) {
    14     if (m == 0)
    15         print(aux, n);
    16     if (m <= 0 || cur == n)
    17         return;
    18 
    19     // 不选cur
    20     helper(m, cur + 1, aux, n);
    21 
    22     // 选cur
    23     aux[cur] = 1;
    24     helper(m - cur, cur + 1, aux, n);
    25     aux[cur] = 0;  // 回溯
    26 }
    27 
    28 void find_combi(int n, int m) {
    29     if (n > m) 
    30         find_combi(m, m);
    31 
    32     int* aux = new int[n];  // aux[i] = 1,表示选择i
    33     memset(aux, 0, n * sizeof(int));
    34     helper(m, 0, aux, n);
    35 }
    36 
    37 int main() {
    38     int n, m;
    39     cout << "input n and m:" << endl;
    40     cin >> n >> m;
    41     find_combi(n, m);
    42     return 0;
    43 }
    $ ./a.exe
    input n and m:
    6 3
    1 2
    0 1 2
    3
    1 2
    0 3
    0 1 2
  • 相关阅读:
    vue源码分析—Vue.js 源码目录设计
    vue源码分析—认识 Flow
    在Windows上安装配置MongoDB
    mongoDB概述
    Could not load file or assembly Microsoft.Web.Infrastructure
    配置错误 不能在此路径中使用此配置节(转)
    VS2013快捷键大全
    Create new tool for CSV
    How to get http response.
    C#中Split用法
  • 原文地址:https://www.cnblogs.com/dracohan/p/3919901.html
Copyright © 2020-2023  润新知