给定一组数字:{1,4,5,3,2}和平均值= 2.5,找到平均值为2.5的所有子集。例如,答案将是{1,4},{1,4,3,2},{3,2}
我想在C#
中接近多项式时间来解决这个问题答案 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);
}
}