zoukankan      html  css  js  c++  java
  • 求数组中任意个数字的和等于给定值的数字序列

    原创内容,如转载请注明出处

    题意:给定一个值和一个数组,求数组中任意个数字的和等于给定值的所有序列

    输入:

    10 

    1 2 7 5 6 8 10

    输出

    1 2 7

    2 8

    10

    分析:此题首先对数组排序,再采用递归和回溯的方法,对于每次回溯,是否采用 i 位置上的数字作为加数,是一个回溯的关键点

     1 #include <cstdio>
     2 #include <iostream>
     3 #include <string>
     4 #include <vector>
     5 #include <cstdlib>
     6 #include <algorithm>
     7 
     8 using namespace std;
     9 
    10 //递归和回溯
    11 void CalculateSumCore(vector<int> &src, int sum, int start, vector<int> &resultIndex, vector<int> &resultValue) {
    12     if (sum == 0) {
    13         cout << "下标为:";
    14         for (auto s : resultIndex)
    15             cout << s << " ";
    16         cout << endl;
    17         cout << "下标对应值:";
    18         for (auto s : resultValue)
    19             cout << s << "+";
    20         cout << endl;
    21     }
    22     else if (sum >= src[start] && start < src.size()) {
    23         resultIndex.push_back(start);
    24         resultValue.push_back(src[start]);
    25         CalculateSumCore(src, sum - src[start], start + 1, resultIndex, resultValue);
    26         //注意入“栈”才需要出“栈”即是回溯的过程
    27         resultIndex.pop_back();
    28         resultValue.pop_back();
    29         CalculateSumCore(src, sum, start + 1, resultIndex, resultValue);
    30     }
    31 }
    32 
    33 void CalculateSum(vector<int> &src, int sum) {
    34     sort(src.begin(), src.end());
    35     if (sum < 0 && src.empty())
    36         return;
    37     vector<int> resultIndex; //存储结果值的下标
    38     vector<int> resultValue; //存储结果值
    39     CalculateSumCore(src, sum, 0, resultIndex, resultValue);
    40 }
    41 
    42 int main()
    43 {
    44     vector<int> src{ 1,2,6,3,5,7,10 };
    45     int sum;
    46     cin >> sum;
    47     CalculateSum(src, sum);
    48     system("pause");
    49     return 0;
    50 }

    只为训练自己,时刻锤炼一个程序员最基本的技能!
  • 相关阅读:
    练习JSON
    实现JSON+JDBC的简单操作(以显示对象为例)
    三层架构:表示层-业务逻辑层-数据访问层
    实现json的三个操作(训练JSON)
    实现邮箱验证 简化版
    复习注册表单html和jQuery
    监听器(测试在线人数的)第一种 HttpSessionBindingListener
    Django的中间件
    Django form表单
    Django
  • 原文地址:https://www.cnblogs.com/coding-wtf/p/5947115.html
Copyright © 2011-2022 走看看