1. 程式人生 > >C++求陣列中和為定值的組合

C++求陣列中和為定值的組合

回溯法求矩陣中和為定值的組合

題目描述:
給定整數陣列A,求和為sum的所有組合,並輸出。還有一種類似題目是,求所有組合的個數。
要求:輸出子陣列不能改變元素在原始陣列中的相對位置。
題目要求不能改變相對位置表示不能對原始陣列排序。
C++實現如下:

void sumn(vector<int> &A,int start,int end,int sum,vector<int> &tmp,vector<vector<int>> &res){
    if (start == end && sum == 0
) { res.push_back(tmp); } else if (start == end) return; else{ if (sum >= A[start]){ tmp.push_back(A[start]); sumn(A, start + 1, end, sum - A[start], tmp, res); tmp.pop_back(); } sumn(A, start + 1, end, sum, tmp, res); } }

相關推薦

C++陣列中和組合

回溯法求矩陣中和為定值的組合 題目描述: 給定整數陣列A,求和為sum的所有組合,並輸出。還有一種類似題目是,求所有組合的個數。 要求:輸出子陣列不能改變元素在原始陣列中的相對位置。 題目要求不能改變相對位置表示不能對原始陣列排序。 C++實現如下:

使用java列舉所有給定陣列中和組合

  import java.util.Arrays; public class SolveProb { static int[] arr = new int[100]; static int index = 0;// 記錄當前 public SolvePr

18. 4Sum(陣列中和指定的4個數)

Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = targ

陣列中和某一的全部組合

下面先貼出程式碼,然後再說幾點應該特別注意的。 void Print(int* numbers, int start, int end) { for(int i = start; i<= end; ++i) { cout<<numbers[i];

數列中和的所有組合

問題描述 輸入兩個整數 n 和 m,從數列1,2,3……n中隨意取幾個數,使其和等於 m ,要求將其中所有的可能組合列出來。 演算法 設該演算法為f(m, n),返回一個數組集合r 則f(m, n-1)返回集合r1 且f(m-n, n-1)返回集合r2 在r2中的每個陣列中

演算法程式設計-陣列中和0的最長子串(非連續最長子串+連續最長子串)

輸入:int 型陣列由正數、負數、0組成 輸出:最長和為0的子序列 分析: 1)連續子串 2)非連續子串 void findTargetLen1(vector<int>nums,int sum,int len,int& maxLen,int st

找出排序陣列中和給定的兩個數字

題目:輸入一個已經按升序排序過的陣列和一個數字,在陣列中查詢兩個數,使得它們的和正好是輸入的那個數字。要求時間複雜度是O(n)。如果有多對數字的和等於輸入的數字,輸出任意一對即可。 例如:A[]={1,2,3,4,5,6,7,8,9}, sum = 15,輸出

回溯法求解陣列中和固定的所有元素集合

一、前言        本文參考自http://blog.csdn.net/u012462822/article/details/51193689,找出陣列中和為固定值的所有元素集合,常用的思路是先進行排序,之後再用回溯的方法不斷嘗試所有可能集合。以下先用快速排序(寫得有點

陣列------和的多個數

題目描述; 給定兩個整數sum和n,要求在1, 2, 3, …, n中找到所有和為sum的組合. eg: sum = 6, n = 6 1 2 3 4 5 6

c++陣列中最大最小

用algorithm中的max_elementmin_element這兩個函式返回的是位置指標,*max_element可以獲得最大值1)普通陣列用法!#include <algorithm>int main(){    int a[5] = { 2, 3, 5,

【演算法題】找到陣列中和固定的兩個元素

在閱讀的過程中有任何問題,歡迎一起交流 QQ:1494713801 題目:編寫一個函式,輸入為一個int型的陣列numbers和一個int型變數target,找到這個陣列中和為target的兩個元素,輸出其index。 假設每組輸入有且僅有一組輸出 示例: Input

陣列中和某一個

#include<iostream> #include<vector> #include <algorithm> using namespace std;

Java 列舉陣列中任意元素和組合

import java.util.Arrays; /** * 列舉陣列中任意元素和為定值的組合 */ public class SolveProb { // Arrays.sort(arr); static int[] flag = new int[1

演算法1:給定一個整數陣列和一個目標值,找出陣列中和目標值的兩個數的index

三種解決方法: 1、暴力法:遍歷每個num,查詢目標元素target-num class Solution: def twoSum(self, nums, target): """ :type nums: List[

二叉樹中和給定的路徑

題目:輸入一棵二叉樹和一個整數,打印出二叉樹中節點值的和為輸入整數的所有路徑。從樹的根節點開始往下一直到葉節點所經過的節點形成一條路徑。                              

常見程式設計題——陣列中和某一個

題目描述:給定一個有n個數字的陣列,給出一個數字m,要求所有和等於m的組合。 思路:從頭遍歷,查詢當前這個數在路徑中時能不能和後面的數構成和,如果可以就輸出這個路徑,如果加上這個數比和sum大,說明不能有當前這個數,如果現在的和比sum小,就放入路徑,繼續查詢。 在VS20

陣列相鄰元素差的最大快速演算法(C++版)

題目: 整形陣列A,請設計一個複雜度為O(n)的演算法,算出排序後相鄰兩數的最大差值。 給定一個int陣列A和A的大小n,請返回最大的差值。保證陣列元素多於1個。 思路: 基於桶排序思想 n

c++知識點---函式模板實現陣列的最大

題目: 編寫一個函式模板,求陣列中的最大元素,並寫出呼叫此函式模板的完整程式,使的到函式呼叫時,陣列的型別可以是整型也可以是雙精度型別。 知識點:利用函式模板來解決陣列問題,使用陣列的引用來傳遞引數不

給定陣列中和s的兩個數字

題目:輸入一個遞增排序的陣列和一個數字s,在陣列中查詢兩個數,使得它們的和正好是s。如果有多對數字的和等於s,輸出任意一對即可。  例如:輸入陣列{1,2,4,7,11,15}和數字15.由於4+11=15,一次輸出4和11.   思路: (1)    如果按照開始直觀的想