2011-11-22 62 views
2

給定用戶的大小爲N的整數數組。 打印所有可能的集合,使所有可能數字的和等於數組中的數字。用條件查找給定數組的一組數字的算法

實施例:

陣列A [] = {1,2,3,4,5}

1 + 2 = 3..Output:1,2,3

1+ 3 = 4..Output:1,3,4

1 + 4 = 5..Output:1,4,5

初始設計:

  1. 取一個數字並將其設置爲SetSum
  2. 生成不包括所選號碼的所有金額;檢查制定的總和是否與SetSum相同
  3. 打印出滿足上述條件的數字。
  4. 迭代這個數組,並設置下一個號碼作爲SetSum

一個更高效的設計/實施或不同的方法,歡迎..

+1

如果他們問你這個問題,那麼不適合他們。 – Shahzeb

+0

A **排列**是按某種特定順序排列的排列。 (1,2)和(2,1)是{1,2}的置換。很難告訴你要找什麼,但這絕對不是排列組合。 –

+0

是的..我接受..我感興趣的是隻找到滿足給定條件的一組數字。 – thinkcool

回答

2

這個問題需要你查找其總和的子集給定數字(這裏是一組元素)。有2個approcahes到這樣做:

  1. 蠻力算法,可以手動生成所有的子集,並總結它們加起來是增長的指數級(2^n種組合)或

  2. 的使用動態規劃方法解決問題並找出多項式時間的和。這是算法中的一個標準問題,稱爲子集和問題。如果您不熟悉動態編程的概念,則可以查找任何算法教科書。如果你瞭解動態規劃,那麼谷歌的子集總和問題。希望有所幫助!

+0

據我所知,子集總和問題有一個單一的目標K,你可以打印出總和爲K的所有數字。但是在這裏你有多個目標。 – thinkcool

+0

使用'OR'子句。而不是檢查總和是否達到了一個特定的整數,檢查總和是否達到(S1 | S2 | ... | Sn),其中S1到Sn是您的集合的元素。另一種方法是針對集合中的每個元素運行算法。 –

相關問題