回朔法 求n個數中和為k的最少解

2021-09-05 09:15:12 字數 953 閱讀 7269

給定若干個正整數 a[0],a[1],……,a[n-1],從中選出若干個數,使他們的和恰好為k,要求找出選擇元素個數最少的解。

#include #include #include using namespace std;

listnumlist;

int mincount = -1;

void find_seq(int sum, int index, int * value, list& seq)

if(mincount == -1 || n < mincount)

printf("\t(一共%d個元素)\n",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 n = sizeof(value)/sizeof(value[0]);

printf("正整數集合為::");

for(int i = 0; i < n; ++i)

printf("\n請輸入k的值:");

scanf("%d", &k);

printf("可能的序列如下:\n");

find_seq(k, n-1, value, seq);

if(mincount == -1)

else

return 0;

}

會不定期進行更新,歡迎關注

求n 中因子k的個數

思路 求n的階乘某個因子k的個數,如果n比較小,可以直接算出來,但是如果n很大,此時n 超出了資料的表示範圍,這種直接求的方法肯定行不通。其實n 可以表示成統一的方式。n km m a 其中k是該因子,m n k,a是不含因子k的數的乘積 下面推導這個公式 n n n 1 n 2 3 2 1 k 2...

7 給定n個序列,求相鄰的k個數之和為最大

1 問題描述 給定 n個數,求相鄰的 k個數之和為最大。要求給出複雜度較小的一種演算法 再解決這個問題前,先了解一下類似的常見問題。2 給定一串數字 可正可負的 int,放在陣列 num裡 要求找到起始位置 start 和終止位置 end,使得從 start 位置到end 位置的所有數字之和最大,返...

求已知N個數中第k小的數

本來今天想寫的是 面試記 八一八hr姐姐和面試官叔叔。但聊到面試難免要聊面試題,而演算法題自是其重中之重。為了日後能專心地八面試官,今天就先說說這個演算法。本篇涉及專業知識,外行止步,發生危險概不負責。問題 random select 求已知n個數中第k小的數。k 先排序再取數的做法需要o n lo...