2017-06-14 58 views
0

給定一組數字:{1,4,5,3,2}和平均值= 2.5,查找平均值爲2.5的所有子集。例如,這裏的答案將是{1,4},{1,4,3,2},{3,2}查找給定平均值的所有子集

我想解決這個接近多項式時間在C#

+5

這似乎是功課。你到目前爲止嘗試過哪些方法?你可能會考慮提及你所做的事情(以及爲什麼它不起作用),然後人們可能更傾向於幫助填補這方面的空白。 –

+0

提示:與* subset sum *問題有關。 –

+0

不是任務,它是個人項目的一部分。以下是我試過的代碼。 –

回答

0

不是賦值,它的個人項目的一部分。以下是我試過的代碼。

這裏a =平均值,w = {1,2,3,4,5},m =目標平均值。

public void SumOfSubset(double a, int k) 
     { 
      if (k > 4) return; 
      x[k] = 1; 
      var count = x.Where(i => i == 1).Count(); 
      if (((a * (count - 1)) + w[k])/count == m) 
      { 
       for (int i = 0; i <= k; i++) 
       { 
        if (x[i] == 1) 
        { 
         Console.Write(w[i] + ","); 
        } 
       } 
       Console.WriteLine(); 

      } 


       if (((a * (count - 1)) + w[k] + w[k + 1])/(count + 1) <= m) 
       { 
        SumOfSubset(((a * (count - 1)) + w[k])/count, k + 1); 
       } 
       if (((a * (count - 1)) + w[k + 1])/count <= m) 
       { 
        x[k] = 0; 
        SumOfSubset(a, k + 1); 
       } 


     }