1. 程式人生 > >從給定的N個正數中選取若干個數之和為M

從給定的N個正數中選取若干個數之和為M

#include <iostream>
#include <list>
using namespace std;

void find_seq(int sum, int index, int * value, list<int> & seq)
{
    if(sum <= 0 || index < 0) return;
    if(sum == value[index])
    {
        printf("%d ", value[index]);
        for(list<int>::iterator iter = seq.begin(); iter != seq.end(); ++iter)
        {
            printf(
"%d ", *iter); } printf("\n"); } seq.push_back(value[index]); find_seq(sum-value[index], index-1, value, seq); //放value[index] seq.pop_back(); find_seq(sum, index-1, value, seq); //不放value[index] } int main() { int M; list<int> seq; int value[] = {2
,9,5,7,4,11,10}; int N = sizeof(value)/sizeof(value[0]); for(int i = 0; i < N; ++i) { printf("%d ",value[i]); } printf("\n"); scanf("%d", &M); printf("可能的序列:\n"); find_seq(M, N-1, value, seq); return 0; }

相關推薦

給定N正數選取若干個數之和M

#include <iostream> #include <list> using namespace std; void find_seq(int sum, int ind

面試題:給定N正數選取若干個數之和最接近M

這道題跟撈魚問題一樣,都是剛進實驗室新生培訓那會兒做過的題目,不過這個是一師姐當時找工作的面試題。 如題,並輸出該子序列 測試用例:2,9,5,7,4,11,10 分別輸出最接近33、40、47、60的子序列 分析:N個數之和接近M,將M看做一個容量

給定N正數選取若干個數之和最接近M

解法:轉換成01揹包問題求解,從正整數中選取若干個數放在容量為M的揹包中。 可以用01揹包的一維陣列進行求解。 程式程式碼: #include<stdio.h> const int MA

(動態規劃)有 n 學生站成一排,每個學生有一個能力值,n 學生按照順序選取kk 名學生,要求相鄰兩學生的位置編號的差不超過 d,使得這 kk 學生的能力值的乘積最大,返回最大的乘積

第2關:最強戰隊 挑戰任務 綠盟和各大名企合作,舉辦程式設計能力大賽,需要選拔一支參賽隊伍。隊伍成員全部來自“綠盟杯”中表現優秀的同學,每個同學都根據在比賽中的表現被賦予了一個能力值。現在被召集的N個同學已經集結完畢,他們按照編號依次站成了一排。 你需要編寫一個程式,從

N正數選取若干個數之和最接近M

問題描述:給定N個正數(A1,、A2、A3、...、AN),從中選取若干(k)個數,使得這些數之和最接近M。 演算法分析:最接近可能有兩種情況,一種是k個數之和小於M,另一種是k個數之和大於M,所以問題可看成兩個01揹包問題(揹包容量分別為M和A1+A2+A3+...+AN

在一個數查詢任意個數m的的組合

最近比較鬱悶,遇到幾次類似的題目了,現在打算總結一下,防止以後又忘了 1、輸入一個遞增排序的陣列和一個數字S,在陣列中查詢兩個數,使得他們的和正好是S,如果有多對數字的和等於S,輸出兩個數的乘積最小的

給定陣列,試求能否陣列取出n不復用的數的和sum

這是之前在一次面試中遇到的一道題,當時因為太久沒擼演算法,太久沒刷題,所以gg,現在回顧一下。 問題描述: 實現一個函式,傳3個引數,指定陣列(有小數、正負數),n(取出個數),sum(指定和),輸出是否能找到這幾個數。 這和經典的湊硬幣問題其實本質上是相

1到n正數1出現的次數

題目:輸入一個整數n,求從1到n這n個整數的十進位制表示中1出現的次數。例如輸入12,從1到12這些整數中包含1 的數字有1,10,11和12,1一共出現了5次。分析:這是一道廣為流傳的google面試題。 簡單的方法就是按照給位進行分析 在個位出現1的個數=n/10+(個位=0,0;個位&

階乘與排列的例子(n元素m元素組成互不相同並且不重複的三位數)

public static void main(String[] args) { //1.編寫一個程式,輸入n,求n!(用遞迴的方式實現)。4*3*2*1=4! 注:0!=1 System.out.println("4的階乘為:" + getFactoria

給定N節點求組成二叉搜尋樹個數——一道演算法題探討神奇的Catalan數

引 Catalan數,中文卡特蘭數又稱卡塔蘭數,是組合數學中一個常出現在各種計數問題中的數列。一旦入坑,你會發現這個數列相當有意思,能夠應用於很多看起來特別複雜的計算場景,當然,並能將之迎刃而解。 :卡塔蘭數是組合數學中一個常在各種計數問題中出現的數列

如何一堆數選出若干個數,使其和等於給定的數?

如題,比如有一堆數:13,2,4,2,4,8,7,8,6 要從中挑選出若干個數,使得它們的和等於32,挑選出來的數是:20,6,4,2 我是使用“試探”法來解這個題目,思路如下: 先對數進行排序:13,8,8,7,6,4,4,2,2 選出最大的數字,以及不大於目標數字後續數字,於是我挑選到

python兩種方法實現1000萬隨機數找出top n元素(附c語言版)

轉載請註明地址:http://blog.csdn.net/echoutopia/article/details/51731269 很早之前看到一道面試題: 有一個長度為1000w個數組,每個元素互不重複,找出其中top n元素。 我感覺重複或者不重複都差不多,所以沒管不重複

給定陣列選取任意個數(可重複),使其和給定值。

回溯法練習:從給定有序陣列中選取任意個數(可重複),使其和為給定值(leetcode39):Example 1:Input: candidates = [2,3,6,7], target = 7A solution set is: [ [7], [2,2,3] ]思路

n物件隨機選擇一個

現在有n個物件,讓從裡隨機選擇一個是非常簡單的。最直接的方法是產生一個1~n的隨機數就可以了。但是現在如果我告訴你,n是不確定的,又該怎麼做? 現在問題變為: 如何從事先不知道文字檔案行數的情況下讀取該檔案,從中隨機選擇一行並輸出? 這個題目看上去比原來的問題有意思的多。答

【C++程式設計練習】任意給定 n 有序整數,求這 n 有序整數序列的最大值,位數和最小值

題目來源 CCF模擬試題>>小中大>>201903-1 題目描述 老師給了你n個整陣列成的測量資

(hdu step 7.1.6)最大三角形(凸包的應用——在n找到3點,它們所形成的三角形面積最大)

三角形 struct names com 都在 acm sni 都是 tran 題目:最大三角形Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S

n整數1出現的次數

sin num 描述 str mil 需要 數據 暴力求解 最大 整數中1出現的次數(從1到n整數中1出現的次數) (兩種方法:1、規律。2暴力求解) 題目描述 求出1 ~ 13的整數中1出現的次數,並算出100 ~ 1300的整數中1出現的次數?為此他特別數了一下1 ~

在0~N數字,取指定個數的不重復數字,要求這些數字的和指定值,求所有結果

readline tco write span count string rgs logs index 1 using System; 2 using System.Collections.Generic; 3 using System.Linq;

m蘋果放在n盤子有多少種結果

蘋果 分享圖片 alt apple 都沒有 ava http 效率 port 題目 m個蘋果放在n個盤子中有多少種結果,前置條件: 允許存在空盤 重復的擺放結果忽略不計 根據題意,也就是有3種情況,的確完全重復的擺放方式是沒多大意義的 思路 這題可以用枚舉的描述方式進

javascript實現:在N字串找出最長的公子串

  1 'use strict' 2 3 function 找出最長公子串 (...strings) { 4 let arraiesOfSubStrings = [] 5 arrayOfStrings.reduce((accumulator, currentVal