一、問題描述
給定乙個數t,以及n個整數,在這n個數中找到加和為t的所有組合,例如t=4,n=6這6個數為[4,3,2,2,1,1],這樣輸出就有4個不同的組合它們的加和為4:4,3+1,2+2,and 2+1+1。請設計乙個高效演算法實現這個需求。
二、解題思路
先將資料按從大到小進行排序,然後使用回溯法遍歷所有可能。注意去掉重複的結果。
三、**實現
#includeusing namespace std;
int a[100]=;
bool x[100];//標記第i個元素是否已經使用
int n=6;//元素個數
int t=4;//目標和
int sum;//當前和
int cmp(const void *a,const void *b)
void backtrace(int n)
{ if(sum>t)//當前和大於t
return ;
if(sum==t)//當前和等於t,輸出結果
{for(int j=0;j
阿里巴巴筆試題
1 有乙個虛擬儲存系統,若程序在記憶體中佔3頁 開始時記憶體為空 若採用先進先出 fifo 頁面淘汰演算法,當執行如下訪問頁號序列後1,2,3,4,5,1,2,5,1,2,3,4,5,會發生多少缺頁?a 7 b 8 c 9d 10 2 設有乙個順序棧s,元素s1 s2 s3 s4 s5 s6依次進棧...
阿里巴巴筆試題
題意 給定一串數字 判斷是否存在這三個元素,它們將數字串分為四個子串,其中每個子串的數字之和均相同 該3個元素不納入計算 要求時間複雜度和空間複雜度均不能超過o n 思路 奇妙的利用了單調性,列舉第一段的和,第一段的和確定了,那麼接下來的2,3,4段的和就都確定了,什麼單調性呢?就是i右移,j,k都...
阿里巴巴筆試題
1 有乙個虛擬儲存系統,若程序在記憶體中佔3頁 開始時記憶體為空 若採用先進先出 fifo 頁面淘汰演算法,當執行如下訪問頁號序列後1,2,3,4,5,1,2,5,1,2,3,4,5,會發生多少缺頁?a 7 b 8 c 9d 10 2 設有乙個順序棧s,元素s1 s2 s3 s4 s5 s6依次進棧...