zoukankan      html  css  js  c++  java
  • 寻找和为定值的多个数 【微软面试100题 第二十一题】

    题目要求:

      输入两个整数 n m ,从数列1 23.......n 中随意取几个数 ,使其和等于 m ,要求将其中所有的可能组合列出来。不能是一个数。

    题目分析:

      0/1背包问题,动态规划

    代码实现:

    #include<iostream>
    #include<list>
    
    using namespace std;
    
    list<int>list1;
    
    void find_factor(int sum, int n)
    {
        // 递归出口
        if(n <= 0 || sum <= 0)
            return;
        // 输出找到的结果
        if(sum == n)
        {
            //从栈顶逐个输出
            for(list<int >::iterator iter = list1.begin(); iter != list1.end(); iter++)
                cout << *iter << " + ";
            //输出本次的
            cout << n << endl;
        }
        //插入到栈底,这样输出的时候就是从大到小输出了。
        list1.push_back(n);                //典型的背包问题
        find_factor(sum-n, n-1);        //放n ,n-1 个数填满 sum-n
        list1.pop_back();
        find_factor(sum, n-1);            //不放n ,n-1 个数填满 sum
    }
    int main()
    {
        int sum, n;
        cout << "请输入你要等于多少的数值 sum:" << endl;
        cin >> sum;
        cout << "请输入你要从n 数列中取值的 n:" << endl;
        cin >> n;
        cout << "所有可能的序列,如下: " << endl;
        find_factor(sum,n);
        return 0;
    }
    View Code
  • 相关阅读:
    暂时转换
    内置函数⼆
    day13内置函数⼀
    day12⽣成器和⽣成器表达式
    20181031作业
    20181030函数2
    20181029函数1
    20181026
    20181025
    20181024
  • 原文地址:https://www.cnblogs.com/tractorman/p/4058804.html
Copyright © 2011-2022 走看看